如题
var obj=new Object();
Object.prototype.toString.call(obj);// "[object Object]"
var arr=new Array();
Object.prototype.toString.call(arr);// "[object Array]"
如此类推,输出的"[object Object]"这些字符串,第一个object代表的是什么?第二个Object代表的又是什么?开头还是大写。
只是略微的知道,并不清楚其原理,大佬们指导一下。
核心:对象和对象子类型
先看一段MDN解释:
https://developer.mozilla.org...
第一个object代表custom object(对象)。
第二个Object代表type(对象子类型)。
那么问题来了,什么是custom object?
不严谨的说,Javascript中的所有,都是由custom object(对象)衍生出来的type(对象子类型).
再说说常见的简单和复杂数据类型
用toString()时,同样也会返回
不想写了,都一样,后面都是各自的type(对象子类型)。
至于为什么Object.prototype.toString.call("foo")同样会返回[obejct String],因为"foo"和String("foo")是等价的,注意,此处没有new。
这时候可能比较晕了,那么再来想想什么是简单数据类型,什么是复杂数据类型。
我的理解是,所有的数据类型都是由custom object(对象)衍生出来的,所以他们都是对type(对象子类型)。
只不过简单数据类型没有继承那些原型链上的方法,这样更加轻量;若继承的话,需要使用new操作符,就彻底成一个复杂数据类型了。
几乎所有的对象子类型都会继承Obejct,不过我想Object.create(null)是所有其他对象子类型的最原始状态
至于Object是怎么来的,我想这是个迷了,等后面我知道了再来补充答案
也不知道对不对,反正我把所有已知都联系起来了,轻喷