js 包装类 浅析🤣

95 阅读2分钟

包装类是什么

   包装类就是: 一些内置的构造函数
     比如:
        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 属性可以截断 数组的长度,如下图:

但是有啥用呢

。。。希望有大侠科普经典的用法!