内部属性[[class]]

对象内部属性[[class]]

所有typeof返回值为“object”的对象(如数组)都包含一个内部属性[[class]],这个属性无法直接访问,一般通过Object.prototype.toString(..)来查看。

例如:

数组的内部[[class]]属性值是"Array",正则表达式是"RegExp",多数情况下,对象的内部[[class]]属性和创建该对象的内建原生构造函数相对应,但并非总是如此.

基本数值类型

虽然Null()和Undefined()这样的原生构造函数并不存在,但是内部[[class]]属性值仍然是"Null"和"Undefined".

其他基本类型值

基本类型值被各自的封装对象自动包装,所以他们的内部[[class]]属性值分别为"String","Number"和"Boolean"

封装对象包装

由于基本类型值没有.length 和 .toString()这样的属性和方法,需要通过封装对象才能访问,此时JavaScript会自动为基本类型值包装一个封装对象;


内部属性[[class]]_第1张图片

一般情况下,我们不需要直接使用封装对象,最好的办法是让JavaScript引擎自己决定什么时候使用封装对象,如优先考虑使用"abc"和123这样的基本类型值,而不是new String("abc")和new String(123)

拆封

如果想要得到封装对象中的基本类型值,可以使用valueOf()函数:


内部属性[[class]]_第2张图片

你可能感兴趣的:(内部属性[[class]])