JavaScript未定义的变量是否自动定义?
JavaScript是否会自动尝试定义未定义的变量以:JavaScript未定义的变量是否自动定义?,javascript,Javascript,JavaScript是否会自动尝试定义未定义的变量以: document.getElementById('someUndefVarName') 与中一样,以下内容似乎是等效的: <div id="myUndefVar">:)</div> <script> alert(myUndefVar); // why does this work!? alert(document.getElementById('myUndefVar')); </s
document.getElementById('someUndefVarName')
与中一样,以下内容似乎是等效的:
<div id="myUndefVar">:)</div>
<script>
alert(myUndefVar); // why does this work!?
alert(document.getElementById('myUndefVar'));
</script>
:)
警报(myundefar);//为什么这样做!?
警报(document.getElementById('myundefar');
请参见JSFIDLE示例:
还是发生了我不明白的事情?这真的让我措手不及,因为我在使用“严格使用”时预期会出现某种错误。我相信这个问题的答案可以概括为: 浏览器根据元素ID自动创建全局变量 一个相关问题: 这似乎是一个非常糟糕的特性,我会避免依赖这种行为。一些(而且只有一些)浏览器从ID创建全局变量 这在调试时非常有用(即在chrome控制台中,您只需键入“Blah”即可使用
id=“Blah”
访问HTML元素),但不应依赖跨浏览器工作
此外,如果您这样做:
<div id="myUndefVar">:)</div>
<script>
var myUndefVar;
alert(myUndefVar);
</script>
:)
var-myvar;
警报(myvar);
或者这个:
<div id="myUndefVar">:)</div>
<script>
alert(myUndefVar);
var myUndefVar;
</script>
:)
警报(myvar);
var-myvar;
然后,
警报
将显示值未定义
。如果在同一范围内没有定义具有相同名称的其他变量(包括提升,如第二个示例),它将只查找元素的命名ID。请参阅JSFIDLE代码,该变量显然没有在任何地方明确定义。是。浏览器将从元素ID创建全局变量。不过,我不会相信这种行为。浏览器为元素“id”值创建全局绑定(window
properties)。@theporchrat:让我们来了解一下:-D@theporchrat我个人认为这是一个非常糟糕的主意。Internet Explorer很久以前就这样做了,最终其他浏览器屈服了。一个不这样做的浏览器示例:标准模式下的Firefox。上面的var技巧在Safari中不起作用。我只是被它弄糊涂了。您必须显式地为变量赋值。