标签:
#p1
js中新建一个字符串对象var a = new String("123");
返回给a的将是一个String对象:String {0: "1", 1: "2", 2: "3", length: 3, [[PrimitiveValue]]: "123"};
因为Array数组类型中也存在一个length,并且改变length能够改变数组的大小,而String对象的length属性是一个只读属性,并不可写
输入a.length = 1之后 查看a数值与之前一样。
这时候我们想往里面加一个字符length能改变吗?
a[3] = "4";//String {0: "1", 1: "2", 2: "3",3:"4", length: 3, [[PrimitiveValue]]: "123"};
我们可以看到,数据是添加到对象内部了,但是具体数值并没有发生改变 只有在重构字符串对象的时候length才会发生改变
#p2
基本数据类型为了方便其操作,ECMAScript中提供了三个特殊的引用类型:String Boolean Number
使得我们每当读取一个基本数据类型后台会对应创建一个基本包装对象;
从而我们能够调用一些方法来操作这些数据;
var str1= "nihao nihao";
var str_len = str1.length;
例如上面的代码,执行过程可以看作
var temp = new String(str1);
str_len = temp.length;
temp = null;
这样一个过程,所以str1.length这个值只是临时创建出来的,并直接保存下来,执行过后会进行销毁
#p3
最后是有关函数前面添加new执行,和不添加new执行的一个区别;
举一个例子:
function a(){
return function(){var a =‘nihaonihao‘}
}
var backA = a()//function(){var a =‘nihaonihao‘}
var backB = new a();//function(){var a =‘nihaonihao‘}
function b(){
return ‘nihaonihao‘
}
var backC = b()//‘nihaonihao‘
var backD = new b();//b{}
可以看到a方法返回值是一个函数(引用数据类型 array function obj)b方法返回的是一个字符串(基本数据类型 string boolean number)
通过上面我们可以简单的理解:
1.当返回值是基本数据类型时正常执行函数返回该返回值,而new的方式执行返回的是该函数对象。
2.当返回值是引用数据类型时两种执行方式返回值都是同一个。
欢迎补充谢谢
标签:
原文地址:http://www.cnblogs.com/leekk/p/5387018.html