1、包装类
引用值跟原始的区别:
引用值可以有属性跟方法
原始值不能有属性跟方法
var str = 'abc';
str.length; str的length为3.
那么这个原始值类型的str为什么有属性length呢。
这就是因为包装类
str.length;事实上是隐性的执行了new String('abc').length这一句语法
// 包装类
// 简单的num 跟 string类型是无法添加属性的
var num =123;//
num.len = 3;//系统会隐性new Number(123).len = 3; 创建完后会立刻delete
console.log(num.len);//重新打印的时候,会再次new Number(num.len) 这时len为undefined
var arr = [1,2,3,4];//数组是有属性length的
arr.length = 2;//用length来截取arr长度
console.log(arr);//[1,2]
var str = 'abcd';//简单字符串没有length属性
str.length = 2; //系统会隐性new String(str).length=2; 然后delete。
// 删除的是隐性创建的,跟原有的str无关
console.log(str);//打印原来的str 'abcd'
console.log(str.length);//str本身无length,系统会new String('abcd').length,打印出4
var str = 'abc';
str+=1;
var test = typeof(str);
if (test.length==6) {
test.sign = 'typeof返回结果为string';
}
console.log(test.sign);
// 答案:打印出undefined
// 解析:
// str+=1; str = 'abc1',为string类型。
// test='string'; test.length系统自动new String获取到length为6
// test.sign=''; 由于test为string类型,没有属性。系统new String().sign了之后立刻删除
// 再次打印test.sign时 系统new String(test).sign 此时的sign没有赋值,为undefined