为什么不能在JS“name”中调用变量?
var wrapper = document.createElement("div");
var name = document.createElement("div");
wrapper.appendChild(name); // TypeError: Failed to execute 'appendChild' on 'Node': parameter 1 is not of type 'Node'.
document.body.appendChild(wrapper);
当我在控制台的新选项卡中输入“name”时,它会返回一个空字符串吗?
我使用Chrome。
答案 0 :(得分:6)
因为window.name
是window
对象的魔法属性,并且只能保存字符串(任何对象,包括数组,都被强制转换为原始类型,变成类似"[Object Object]"
的东西)。全局范围中定义的变量将成为全局对象的属性,并且可能导致冲突。
您可以在任何非全局范围内使用变量name
。简单的解决方法是将代码包装在立即调用的函数表达式(IIFE)中。
(function(){
var wrapper = document.createElement("div");
var name = document.createElement("div");
wrapper.appendChild(name); // workd
document.body.appendChild(wrapper);
}());
答案 1 :(得分:3)
'名称'是依赖于实现的JavaScript对象,方法或属性的预定义名称,您应该避免将其用作变量的名称,尽管它不是保留字并且可能在某些浏览器中有效