Javascript中让人迷惑的一些基本数据类型跟内置包装对象

数据类型跟对象的区别:

  基本的数据类型是没有 属性 和 方法的,但是对象有;就像是java中的基本数据类型跟引用类型一样;

看个例子:

var s= "      xxxx"

var xxxx=s.substring(s.lastIndexOf(" ")+1,s.length);

首先得明白在js中字符串可是基本类型,与数字类型一样。对比java,它的基本类型会有这种方法调用么?当然没有。java的String可是个对象,才能这么调。换成是int肯定不行。

我们可以使用typeof运算符来查看字符串的数据类型,我们可以在浏览器地址栏中输入以下代码并回车查看结果

javascript:var s="";typeof(s)

结果当然是 string。

而对象类型则是object。迷惑么?那么为什么字符串的操作采用对象的表示法呢?

事实上js中三个关键的基本类型都有一个对应的对象类。即js还支持Number、String、Boolean类,这些类是那些基本数据类型的包装类,就是wrapper。wrapper不仅与基本类型的值相同,还封装了一些运算数据相关的属性和方法。

js可以很灵活的将一种类型转换为另一种了类型,当我们在对象环境中使用字符串是,js会为这个字符串值内部地创建一个String包装对象。String对象就代替了原始的字符串。其他两个类型也是如此。我们在对象环境中使用字符串是,要注意这个String对象只是瞬时存在的,它使得我们可以访问属性或方法,此后就没有用了,所以系统会将他丢弃。

比如:

var len=s.length;

假设s存在且是一个字符串。那么在上述语句执行过程中会创建一个新的String对象以便可以访问length属性,它是瞬时的。而s不会有任何变化。这就如同电影里的替身。地球人都能理解吧。

如果你想在js中显式的使用String对象,你得使用new运算符。如:

var s = ”hello world“;//字符串基本类型  primitive

var s= new String("hello world");//字符串对象  object

这两个s的功能和操作几乎是一模一样的。大概只有typeof能识别真假孙悟空。

反过来,当String对象 s要与基本类型字符串作+运算,即在需要原始字符串的环境下,String对象会自动转换成基本字符串类型。

比如 msg= s+"!";那么此时s暗地里由一个基本类型字符串替身来完成这个运算过程,其本身还是字符串对象,但是如果是

s = s+"!";则s变为基本类型字符串;

记住其他两个类型,Number和Boolean,原理跟String是一样的。

时间: 2024-08-08 15:15:30

Javascript中让人迷惑的一些基本数据类型跟内置包装对象的相关文章

JS-安全检测JavaScript基本数据类型和内置对象的方法

前言:在前端开发中经常会需要用到检测变量数据类型的需求,比如:判断一个变量是否为undefined或者null来进行下一步的操作,今天在阅读“编写高质量代码-改善JavaScript程序的188个建议”这本书的时候看到这个比较好的方法,在此小记一笔以备在以后的开发中使用. 1:如下所示是我编写的演示代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>I

Javascript 中的false、0、null、undefined和空字符串对象

在Javascript中,我们经常会接触到题目中提到的这5个比较特别的对象——false.0.空字符串.null和undefined.这几个对象很容易用错,因此在使用时必须得小心. 类型检测 我们下来看看他们的类型分别是什么: [html] view plaincopyprint? <script type="text/javascript"> alert(typeof(false) === 'boolean'); alert(typeof(0) === 'number')

关于 JavaScript 中一个小细节问题 (在控制台中直接 {} 对象报错问题)

在 Chrome 浏览器,大家可能遇到这样一个小问题. 随便输入一个 Object 对象  ,比如 {Name:'王尼玛',Age:20} ,将会报错.之前,也从来没去考虑过到底是为啥原因. 今天,刚好看到博客园有博友文章,顺便记录一下. 在 JavaScript 中, : 有三种作用,想必大家都知道,其一  三元表达式  true? A:B,其二 在 switch case 中 case 语句中会用到,其三 就是上图中,对象直接量表达式中. 其实 ,在 JS 中,: 还有一种用法,如下所示,内

一篇文章带你了解JavaScript中的函数表达式,递归,闭包,变量,this对象,模块作用域

作者 | Jeskson 来源 | 达达前端小酒馆 定义函数的方式: 第一种为 函数声明: 第二种为 函数表达式. 语法: function functionName(arg0, arg1, arg2) { // 函数体 } 在Firefox,Safari,Chrome和Opera有效: 就是通过这个属性可以访问到这个函数指定的名字. console.log(functionName.name); // 'functionName' 函数声明: 它的一个重要特点就是:函数声明提升,就是在执行代码

python 之 前端开发( JavaScript变量、数据类型、内置对象、运算符、流程控制、函数)

11.4 JavaScript 11.41 变量 1.声明变量的语法 // 1. 先声明后定义 var name; // 声明变量时无需指定类型,变量name可以接受任意类型 name= "egon"; ? // 2. 声明立刻定义 var age = 18; 2.变量名命名规范 1.由字母.数字.下划线.$ 组成,但是不能数字开头,也不能纯数字2.严格区分大小写3.不能包含关键字和保留字(以后升级版本要用的关键字).如: abstract.boolean.byte.char.clas

glibc中几个有用的处理二进制们的内置函数

说明:因为在牡丹江网络赛中看见北大AC非常简洁的代码里面把二进制用得是炉火纯青,在里面看见了处理二进制的函数,所以咱也学一下. (1) - Built-in Function: int __builtin_ffs (unsigned int x) Returns one plus the index of the least significant 1-bit of x, or if x is zero, returns zero. 返回右起第一个'1'的位置. (2) - Built-in F

JavaScript中function的多义性

JavaScript 中的 function 有多重意义.它可能是一个构造器(constructor),承担起对象模板的作用: 可能是对象的方法(method),负责向对象发送消息.还可能是函数,没错是函数,和对象没有任何关系独立存在的可以被调用的函数. 由于语言设计者的妥协,在 JavaScript 加入了一些 class 相关的特性,以使 JavaScript 看起来确实象 Java,可以 “面向对象”.虽然 JavaScript 添加了 new 和 this, 但却没有 class (ES

深入理解JavaScript中创建对象模式的演变(原型)

创建对象的模式多种多样,但是各种模式又有怎样的利弊呢?有没有一种最为完美的模式呢?下面我将就以下几个方面来分析创建对象的几种模式: Object构造函数和对象字面量方法 工厂模式 自定义构造函数模式 原型模式 组合使用自定义构造函数模式和原型模式 动态原型模式.寄生构造函数模式.稳妥构造函数模式 第一部分:Object构造函数和对象字面量方法 我之前在博文<javascript中对象字面量的理解>中讲到过这两种方法,如何大家不熟悉,可以点进去看一看回顾一下.它们的优点是用来创建单个的对象非常方

在JavaScript中生成自定义的对象

使用对象便于组织信息.下面我们介绍如何在JavaScript中生成自定义的对象. ---------------------- JavaScript 对象 在前面几章中我们学到JavaScript中有些内置的对象,比如String, Date, Array等等.除此之外,你还可以定义自己的对象. 对象是一种特殊的数据,含有属性和函数. 下面让我们用一个例子来说明:比如一个人是一个对象.属性是与对象有联系的值,比如人的属性包括姓名,身高,体重,年龄,肤色,眼睛的颜色等等.所有人都有这些属性,但是每