包装类是什么
包装类就是: 一些内置的构造函数
比如:
var num = new Number(123);
var str = new String("str");
var boolean = new Boolean(true);
与字面量造出的对象的区别
通过包装类造出来的对象与通过对象的字面量 造出来的对象有什么不同呢?看下图
为什么呢? 因为:
重大区别:
原始值num 是没有属性方法的
只有对象是有属性方法的,所以通过构造函数new之后,可以给num2对象加属性
var num = 123;
num.name = "xiaowang" //给num 加一个属性len,该属性的值是3
console.log(num.name) --输出--undefinded
因为 num 是原始值,不可以加属性,但是在编译解释的时候,js内部是这么操作的:
var num = new Number(123) ; num.name = "xiaowang";然后系统意思到 你这是原始值,不可以加属性,所以 执行delete 删除属性, 所有 num.name= "xiaowang" 不会报错
所以当访问 num.len的时候,系统是再次的隐式的执行了new Number(123)的操作。与刚刚创建的对象不是同一个对象,是一个新的对象,找不到name的属性,自然会返回undefined
做一个题
var str = "abc";
str +=1 ;
var test = typeof str;
if(test.length == 6){
test.sign = "typeof 返回的结果是string "
}
console.log(test.sign);
------------------------
答案 输出的是 undefined
因为 var str = "abc";
str +=1 ;
//======>str 为 "abc1"
// typeof返回的值的类型有6种: "number" "string" "boolean" "object" "function" "undefined"
var test = typeof str;
//------>test为 string
if(test.length == 6){
// new String(test).sign
// delete
test.sign = "typeof 返回的结果是string "
}
//new String(test).sign ---->undefined
console.log(test.sign);
再看一个字符串的例子
注意:
string 不管是通过包装类造的,还是通过 var str = "abc",系统都有一个自带的length 返回长度的属性
var str = "abc";
console.log(str.length) // -----3
当 再次赋值时:
str.length = 2;
这一步的还是会 new String("abc").length = 2; delete;
所以 再次输出
console.log(str.length) // -----3
数组的例子
注意:数组的length 属性可以截断 数组的长度,如下图:
但是有啥用呢
。。。希望有大侠科普经典的用法!