现在的位置: 首页 > 综合 > 正文

javascript一些让人迷惑的地方–基本数据类型的包装对象

2017年11月20日 ⁄ 综合 ⁄ 共 985字 ⁄ 字号 评论关闭

 看个例子:

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暗地里由一个基本类型字符串替身来完成这个运算过程。

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

【上篇】
【下篇】

抱歉!评论已关闭.