Javascript 在窗口对象上设置空字符串
在窗口中将空字符串指定为属性有什么缺点吗 例如:Javascript 在窗口对象上设置空字符串,javascript,Javascript,在窗口中将空字符串指定为属性有什么缺点吗 例如: window[""] = function() { console.log("foo"); } (); // will log foo 编辑:当然,这将打破把东西放在括号内澄清的局面。你可能会想要这个: window[""] = function(prop) { console.log(prop); return prop; } 进一步编辑:上面的代码是一种生活。哎呀。这就是我不喜欢自动插入分号的原因: windo
window[""] = function() {
console.log("foo");
}
(); // will log foo
编辑:当然,这将打破把东西放在括号内澄清的局面。你可能会想要这个:
window[""] = function(prop) {
console.log(prop);
return prop;
}
进一步编辑:上面的代码是一种生活。哎呀。这就是我不喜欢自动插入分号的原因:
window[""] = function() {
console.log("foo");
}();
您的代码没有按您认为的那样运行
();
这实际上本身就是一个语法错误
试试这个,看看:
window[""] = function() {
console.log("foo");
};
();
您的代码实际上被解释为(忽略}
和()
之间的空白):
它运行匿名函数并将其返回值(未定义
)设置为窗口[“”]
这就是分号很重要的原因
将空白字符串设置为对象的属性是有效的。但是,由于它不是一个有效的标识符(一个空白字符串),因此如果不执行window[“”]
,就无法访问它
您想要什么原因呢?想象一下,如果jQuery不需要
$
!更短的代码。它将如何更短?如果不使用括号表示法,你就不能调用那个变量,对吗?正如Rocket所阐明的,不,我不能。这就是为什么我不喜欢分号插入…哈,接得好#原因HystrictMode很重要这就是为什么分号是您的朋友:-)或者更确切地说,为什么自动插入分号不是。D:又有一个咬到了灰尘……事实上,这里没有插入分号;)这就是问题所在…:P如果我不依赖它,我会没事的。
window[""] = function() {
console.log("foo");
}();
window[""] = function() {
console.log("foo");
};
window[""](); // logs "foo"