Javascript 为什么链接和脚本标记没有被类型化为元素?
我认为从Javascript 为什么链接和脚本标记没有被类型化为元素?,javascript,types,Javascript,Types,我认为从document.getElementById或document.createElement返回的每个元素实际上都是dom元素的某个版本,可以使用typeof找到该版本。但是,我最近发现,当我尝试对script和link标记执行此操作时,情况并非如此 html 为什么将这些元素类型化为对象?typeof专门用于本机JavaScript对象。typeof返回的值非常有限 “object”响应基本上适用于任何对象,或null(这实际上不是对象…如图所示)。您可能会从任何类型的元素得到相同的
document.getElementById
或document.createElement
返回的每个元素实际上都是dom元素的某个版本,可以使用typeof
找到该版本。但是,我最近发现,当我尝试对script
和link
标记执行此操作时,情况并非如此
html
为什么将这些元素类型化为对象?
typeof
专门用于本机JavaScript对象。typeof
返回的值非常有限
“object”
响应基本上适用于任何对象,或null
(这实际上不是对象…如图所示)。您可能会从任何类型的元素得到相同的响应,而不仅仅是script
和link
您可以使用instanceof
查看元素是否是元素
构造函数原型的一个实例
console.log(l instanceof Element); // true
请注意,像元素及其构造函数这样的对象是宿主对象。它们有时按照与本机JavaScript对象不同的规则运行,因此在测试它们的类型时可能会有一些怪癖需要处理。它们是元素,您得到的结果与其他类型的元素相同 试试这个:
var li = document.createElement("link");
console.log(li instanceof HTMLElement);
它记录true
,因为链接是HTMLElement
的特化实例
但对于大多数对象(“任何其他对象”),只返回“object”
可以使用以下方法获取对象的类型:
typeof
对任何东西都不返回“element”。@j08691-我一定搞错了。
console.log(l instanceof Element); // true
var li = document.createElement("link");
console.log(li instanceof HTMLElement);
console.log(Object.getPrototypeOf(li));