将窗口中的空字符串指定为属性是否有缺点?
例如:
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/