一些应该掌握的知识点
如果在一个原始值上添加属性,当你去访问原始值的属性时,JS引擎会给你这个原始值包装成一个对象,使得所添加的属性可以访问,这就是包装类。
包装类原理案例分析
分析:
分析前先看一个代码示例:现在声明一个变量num,给num赋值一个对象类型的数值1,并给num添加一个length属性,同时给该属性赋值10,通过console.log()对变量num和它的属性num进行检查,结果如下所示:
var num = new Number(1); //声明一个变量num,并给该变量赋值一个对象类型的1
consol.log(num); //控制台显示一个对象类型的1
num.length = 10; //给变量num添加length属性并给该属性赋值10
console.log(num.length) //控制台显示10
原始值的属性一般是不可以被访问的,因为原始值是不存在任何属性的,当需要访问的时候,JS引擎会把这个原始值包装成一个对象,这时这个原始值下的属性就可以被访问了——如下代码所示,当给原始值a添加了一个length属性以后,JS引擎发现a是一个数值类型的原始值,而又需要操作a的属性,于是就给a包装成一个对象,效果相当于上例所示那样对原始值a进行new Number(a),这样当执行语句a.length时就相当于执行语句new Number(a).length,但由于a实际上是一个数值类型的原始值,而数值类型的原始值即使包装后也没有length属性可以访问,所以最终用控制台检查时最终的显示是undefined。
var a = 1; //变量a被赋值后成为一个数值类型的原始值
a.length = 10; //给原始值a添加length属性
console.log(a.length); //控制台显示undefined
- 包装类型
- 需要注意的是,不同类型的原始值被JS引擎包装后都有自己的属性,譬如说被包装后,字符串类型可能拥有数值类型所没有的属性,再譬如说包装后的数值类型是没有length属性的,而被包装后的字符串类型则有。
- 关于基本包装类类型介绍的一篇博客参考:脚本之家 mdxy-dxy:javascript基本包装类型介绍