包装类
基本数据类型:String,Number,Undefined,Boolean,Null
引用类型:Object,Array,Date,RegExp
只有对象才有属性和方法,原始值不能有属性和方法
为什么平时开发中给原始值添加属性不会报错呢?
代码分析:
1.
var num = 4;
num.length= 3;
console.log(num.length);//undefined
//原始类型为啥添加属性不会报错呢,当我们num.length的时候,
//内部隐式的发生一个过程,new Number(4).len = 3; 就是内部
//会新建一个数字对象然后把4赋值进去,之后就会把这个对象delete
//当我们访问num.length的时候,系统会再创建一个数字对象把
//4赋值进去,这次的数字对象和上次的数字对像是两个对象(上次的已经销毁)
//所以此时的数字对象并没有length属性,所以就返回undefined
//这个隐式的中间环节就叫做包装类
2.
var str = "abcd";
str.length = 2;
console.log(str.length);//4
//当我们str.length的时候,str并没有length属性,此时系统就会
//new ("abcd").length = 2;然后销毁,当我们再去str.length的
//时候,系统会new ("abcd").length,此时对象字符串有length属性
//所有就返回4
练习题:
var str = "abc";
str += 1;
var test = typeof (str);
if(test.length == 6){
test.sign = "typeof的返回结果可能为String";
}
console.log(test.sign);//undefined