javascript为什么字符串直接量可以使用属性和方法

快乐打工仔 分类:实例代码

在分析标题中的问题之前先来看一段代码实例:

var str="pipipi.net";
console.log(str.length);

如果不深究,那么上面的代码实在是太普通不过了,但是细致看来,可能有不少朋友有这样的疑问,那就是为什么字符串直接量可以使用属性或者方法,不是只有对象才可能吗,下面就介绍一下其中的原理:

当字符串直接量调用属性或者方法的时候,javascript会隐式将字符串直接量转换为对象,也就相当于执行了如下操作:

var str="pipipi.net";
var str=new String(str)
console.log(str.length);

特别说明:隐式转换创建的是一个临时对象,一旦属性或者方法引用结束,这个新创建的对象就会被销毁(在javascript的内部具体是否真正创建了临时对象或者销毁临时对象不得而知,这里不深究了,从表现来看确实如此)。对于其他的布尔值或者数字也是一样的道理。再来看一段代码实例:

var str="pipipi.net";
str.len=15;
console.log(str.len);

上面代码输出是undefined,因为临时对象在调用属性之后就自动销毁了。

代码修改如下:

var str="pipipi.net";
var str=new String(str);
str.len=15;
console.log(str.len);

上面的代码没有任何问题,因为这里确确实实创建一个对象。

回复

我来回复
  • 暂无回复内容