js一直有个说法,“一切皆对象”,但是总觉得这个说法很是站不住脚,而且对初学者很是误导,大家都知道最新的ECMAScript是定义了七种数据类型,在最新的ECMAScript 标准也定义Symbol类型之前,js也有六种数据类型。
温习下:
6 种原始类型:
Boolean
Null
Undefined
Number
String
Symbol (ECMAScript 6 新定义)
和 Object
关于js有多少数据类型这个问题,已经算是js的基础知识之一了,但是为何还会有一切皆对象这个说法呢,(注:对象作为数据类型之一)。
抛开typeOf instanceOf Object.prototype.tostring 这几个判断方法不谈,寻找其它突破口想这个问题。
包装对象
回顾下对象定义:对象简单来说就是一组“键值对”(key-value)的集合,是一种无序的复合数据集合。可以通过使用点运算符,和方括号运算符来读取自身的属性。
接下来看下面图内容中的执行判断:
特殊对象
第二个说法是:数组函数是特殊的对象,数组确实是对象为么,它是特殊对象? 原因是
[], function(){}是其对应'类'的构造函数的实例对象,可以调用通过__porto__调用自己构造函数的prototype 对象里的方法属性。
这下真相大白了,原始值始终有着自身的数据类型,只是它在调用时被临时转化成了包装对象。而[],fucntion(){} 是由对应的"类",构造出的实例对象。
所以我想,一切皆对象,想表达的应该是一切的数据类型在原型链的机制下都和对象有着千丝万缕的联系罢了。而非真正的一切皆对象。