什么是包装类?能做什么?
代码:
var num = 1;
num.len = 1;
console.log(num.len);//undefined
预热:在看这段代码之前,希望大家能够明白一点,原始值(包括undefied、null)是不能有属性和方法的,属性和方法只能是对象(包括数组、函数)才可以拥有。
执行解析:
1)num.len = 1;原始值本身不可以拥有属性,但是浏览器会隐式的调用 New Number(num).len = 1;然后会迅速调用delete销毁这个属性;
2)console.log(num.len);js引擎由会隐式调用New Number(num).len,但由于刚赋的值被销毁了,所以值时undefied;
eg2:
var arr = [1,3,4,5];
arr.length = 2; //截断数组
console.log(arr);//[1,3]
var str = '2132';
str.length = 2;//隐式调用 new String(str).length = 2 ; delete 截断的是包装类上的字符串与str没有关系
console.log(str)//'2132' 此时调用的真实str
总结:开始我们已经说过原始值不能有属性和方法,但是想number、string、boolean类的原始值可以拥有,原因就是会隐式的调用包装类new Number()、new String()、new Boolean(),这就是为什么我们可以调用字符串的str.length