Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在窗口对象上设置空字符串_Javascript - Fatal编程技术网

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"