JavaScript基本包装类型,以及和引用类型的区别

什么是基本包装类型?

  • 为了便于操作基本类型值,JS提供了3种特殊的引用类型(Boolean,Number,String),这些类型具有与各自的基本类型相对应的特殊行为

工作原理

  • 每读取一个基本类型值的时候,后台会自动创建一个对应的基本包装类型的对象,从而可以调用指定的方法来操作数据
        var a = 'boJack';
        var b = a.substring(2);
        console.log(b);//Jack
  • 当第二行代码访问a时,从内存种读取这个字符串的值,而在读取模式下访问字符串时,后台会自动完成以下操作
        var a = new String('boJack');
        var b = a.substring(2);
        a = null;
        console.log(b);//Jack
后台处理

创建String类型的一个实例
在实例上调用指定的方法
销毁这个实例

  • 这样的话,基本的字符串值就跟对象一样了,上面步骤同样适用Boolean,Number类型对应的布尔值和数字值

与引用类型主要的区别:对象的生存期

在第三行代码再次访问a时,其color属性不见了,这是因为第二行创建的String对象在执行第三行代码的时候已经被销毁,而第三行又创建了自己的String对象,其对象中并没有color属性

        var a = 'boJack';
        a.color = 'aqua';
        console.log(a.color);//undefined

对于自动创建的基本包装类型的对象,只存在于一行代码的执行瞬间,然后立刻被销毁,我们不能在运行时为基本类型值添加属性和方法

而对于使用new创建的引用类型的实例,再执行流离开当前作用域之前都一直保存在内存中

Boolean

基本类型和引用类型的布尔值的两个区别

1.typeof操作符对基本类型返回Boolean.对引用类型返回Object

        var  a =true;
        console.log(typeof a);//Boolean
        var  a = new Boolean();
        console.log(typeof a);//Object

2.使用instanceof 测试Boolean对象会返回true,测试基本类型的布尔值返回false

        var a = true;
        console.log(a instanceof Boolean);//false
        var a = new Boolean();
        console.log(a instanceof Boolean);//true

理解基本类型的布尔值与Boolean对象之间的区别非常重要----建议是永远不要使用Boolean对象

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容