JavaScript中所有对象都是都是Object的实例么?请举例说
明。
Bom和Dom是外部规定的,他们可以遵守也可以不遵守ECMA的规定。所以他们的内置对象可能是Object的实例,也可能不是。
ECMA只是规定了⼀份标准,但是各个浏览器⼚商要不要执⾏这个标准,是他们的⾃由,所以对于⼚商创造的不遵守标准的浏览器版本,出现不是Object的实例的常规对象也是有可能的。
是不是Object的实例,是个很笼统的说法,具体怎么判断,我这能想到三个⽅法。
[document.ate(null),new Object()].forEach(item=>{
javascript说明
console.log(`
${typeof item}
${item instanceof Object}
${String.call(item)}
`)
})
document.all
(属于宿主环境浏览器,不受ECMA限制)
typeof undefined object object
instanceof Object true false true
String.call[object HTMLAllCollection][object Object][object Object] instanceof
instanceof利⽤原型链来确定类型,所以如果利⽤iframe传递过来的值不属于同⼀个全局作⽤域,有不同的全局类型,也会出错。这让我想起了星爷的《九品芝⿇官》,拿出了明朝的尚⽅宝剑来斩本朝的官。
String
String是可以被重写的。
> String.call({})
< "[object Object]"
> String = ()=>'这回傻了吧'
> String.call({})
< "这回傻了吧"
typeof
typeof是个很笼统的⽅法,它的返回值很简单,对引⽤数据类型只能返回object和function,再具体就做不到了。
什么时候返回function,什么时候返回object呢?⾼程三 说,任何在内部实现了[[Call]]⽅法的对象,都应该在应⽤typeof操作符时返回"function"

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。