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

例如:

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

(); // will log foo

jsFiddle demo

编辑:当然,这会破坏将内容放入parens中以进行澄清。您可能需要这样做:
window[""] = function(prop) {
    console.log(prop);
    return prop;
}

进一步的编辑:上面的代码是一种IIFE。哎呀。这就是为什么我不喜欢自动分号插入的原因:
window[""] = function() {
    console.log("foo");
}();

最佳答案

您的代码未按您认为的那样运行。

();

实际上,这本身就是语法错误。

试试看,看看:
window[""] = function() {
    console.log("foo");
};

();

您的代码实际上被解释为(}()之间的空格被忽略):
window[""] = function() {
    console.log("foo");
}();

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

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

将空白字符串设置为对象的属性是有效的。但是,由于它不是有效的标识符(空白字符串),因此如果不执行window[""],就无法访​​问它。
window[""] = function() {
    console.log("foo");
};

window[""](); // logs "foo"

关于javascript - 在窗口对象上设置空字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23704467/

10-14 16:36
查看更多