JavaScript对象和Object关系
W3C上有说JavaScript中所有事物都是对象:数字、字符串、数组、函数等等…我感觉从某种意义上是对的,但也有例外,首先js对象就是一种具有属性和方法的特殊数据类型,而Object
是js中原型链的起点,js中的对象都继承了他,有一个方法可以验证就是使用instanceof
方法,instanceof
的作用是检测一个构造函数的prototype
是否在一个对象的原型链上,比如说;
const arr = [ 1, 2 ]
arr instanceof Object // true,检测Object构造函数的prototype是否在arr对象的原型链上
刚才我有说的例外,就是像字符串这种基本数据类型
的字面量声明方式
,我们都知道字符串有两种声明方式,字面量:
const str1 = '123'
和构造函数方式:
const str2 = new String( '123' )
这样的话str1就不是一个对象,没有属性和方法,str2是一个对象,这样说可能会产生误解,因为我们知道str1也是可以访问属性的:
str1.length // 3
这是怎么回事呢?这里其实是通过String构造函数
生成了一个临时的对象:
var _str = new String( str )
_str.length // 3,然后再把_str对象给销毁掉
比如说我们这样测试下:
var str = '123'
str.a = 1 // 这里会利用String构造函数产生一个临时对象
str.a // undefined,这里又是产生的另外一个临时对象,所以属性a为undefined