js中如何创建一个undifined的对象(函数),内含有值。例如 typeof(a) = undifined

原因是发现document.all方法的Boolean值为false,
image.png

而使用typeof(document.all) 返回值是undifined,
image.png

但是document.all确实是有值的。
image.png

是否有某些方法可以重写对象本身的Boolean值的方法呢?

阅读 2.4k
3 个回答
An [[IsHTMLDDA]] internal slot may exist on host-defined objects. Objects with an [[IsHTMLDDA]] internal slot behave like undefined in the ToBoolean and Abstract Equality Comparison abstract operations and when used as an operand for the typeof operator.
Objects with an [[IsHTMLDDA]] internal slot are never created by this specification. However, the document.all object in web browsers is a host-defined exotic object with this slot that exists for web compatibility purposes. There are no other known examples of this type of object and implementations should not create any with the exception of document.all.

ES 规范定义了一种 [[IsHTMLDDA]] internal slot 的内部属性,拥有这个属性的对象,特点就是你看到的,typeof 值是 undefined,Boolean 值是 false。
而这个属性现在仅被 document.all 使用,document.all 是早年 IE 定义的浏览器方法,其它浏览器也沿用下来了,但现在已经被 Web 规范废弃了,现代规范为了向下兼容,才给它定义了这么奇怪的特性,可以看成是一种例外。

这貌似是一个历史遗留问题,尽量用 querySelector、getElementById 之类的代替吧

document.all是html草案中已经废弃的特性。
另外自定义时估计不能定义这样的对象,这样的对象估计只能是内置对象。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏