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

时间:2014-05-16 21:00:46

标签: javascript

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

例如:

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

(); // will log foo

jsFiddle demo

编辑:当然,这会将内容放在内容中以便澄清。你可能想要这个:

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

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

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

1 个答案:

答案 0 :(得分:7)

您的代码正如您所想的那样运行。

();

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

试试这个,看看:

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

();

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

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

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

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

有效将空字符串设置为对象的属性。但是,由于它不是有效的标识符(空白字符串),因此如果不执行window[""],则无法访问它。

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

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