JavaScript - 为什么我不能调用变量"name"?

sup*_*per 3 javascript syntax

为什么不能在JS"名称"中调用变量?

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);
Run Code Online (Sandbox Code Playgroud)

当我在控制台中的新选项卡中键入"name"时,它返回一个空字符串?

我用的是Chrome.

Gin*_*den 6

因为window.namewindow对象的神奇属性,并且只能保存字符串(任何对象,包括数组,都被强制转换为原始类型,并且变得类似"[Object Object]").全局范围中定义的变量将成为全局对象的属性,并且可能导致冲突.

您可以name在任何非全局范围内使用变量.简单的解决方法是将代码包装在立即调用的函数表达式(IIFE)中.

(function(){

    var wrapper = document.createElement("div");

    var name = document.createElement("div");


    wrapper.appendChild(name); // workd


    document.body.appendChild(wrapper);

}());
Run Code Online (Sandbox Code Playgroud)

  • 这是正确的答案.我还要补充说,设置`window.name`会自动将转换预先设置为String类型,因此设置`window.name`会产生类似`window.name = [object HTMLDivElement]`的内容. (2认同)