在窗口对象上设置空字符串

Ell*_*lle 2 javascript

将窗口中的空字符串指定为属性是否有任何缺点?

例如:

window[""] = function() {
    console.log("foo");
}

(); // will log foo
Run Code Online (Sandbox Code Playgroud)

jsFiddle演示.

编辑:当然,这会打破内容以便澄清.你可能想要这个:

window[""] = function(prop) {
    console.log(prop);
    return prop;
}
Run Code Online (Sandbox Code Playgroud)

进一步编辑:上面的代码是各种IIFE.哎呀.这就是我不喜欢自动分号插入的原因:

window[""] = function() {
    console.log("foo");
}(); 
Run Code Online (Sandbox Code Playgroud)

Roc*_*mat 7

您的代码没有按照您的想法运行.

();
Run Code Online (Sandbox Code Playgroud)

这实际上是一个语法错误.

试试看,看看:

window[""] = function() {
    console.log("foo");
};

();
Run Code Online (Sandbox Code Playgroud)

您的代码实际上被解释为(在}和之间忽略空格()):

window[""] = function() {
    console.log("foo");
}();
Run Code Online (Sandbox Code Playgroud)

其中运行匿名函数并将其返回值(undefined)设置为window[""].

这就是分号很重要的原因!

有效的将一个空的字符串作为一个对象的属性.但是,因为它不是有效的标识符(空字符串),所以如果不这样做就无法访问它window[""].

window[""] = function() {
    console.log("foo");
};

window[""](); // logs "foo"
Run Code Online (Sandbox Code Playgroud)

  • 或者更确切地说,为什么自动分号插入不是.D:*另一个咬尘埃......* (2认同)