我试图通过检查是否定义了一个特定变量来读取我的JavaScript的当前状态:
if(app!= undefined){...}
令我惊讶的是,应用程序结果被定义并引用了DOM中具有id =“app”的元素。
一旦JavaScript设置了自己的变量,该引用就会消失。 删除变量会带回dom-reference。
是什么给出的? 或者,给出一个更具体的问题:为什么这样,它是如何定义的,以及如何检查变量的存在,如果变量尚未被定义,则该变量结果为null / false / undefined哪些ID是DOM的一部分?
ETA: https://jsbin.com/jehoxodeqi/edit?html,output
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>scope test</title>
</head>
<body>
<script type="text/javascript">
console.log ("--1");
try {
console.log (domId);
}
catch (e) {
console.log (e);
}
if (typeof domId === 'undefined' || !domId) {
console.log ("desired behavour.");
}
</script>
<div id="domId">DOM ID 1</div>
<script type="text/javascript">
console.log ("--2");
if (typeof domId === 'undefined' || !domId) {
console.log ("desired behavour... alas, it is defined.");
}
console.log (domId);
if (typeof domId === 'undefined' || !domId) {
console.log ("desired behavour... alas, it is defined.");
}
domId = "some String";
console.log ("--3");
console.log (domId);
delete domId;
console.log ("--4");
console.log (domId);
domId.remove();
console.log ("--5");
try {
console.log (domId);
}
catch (e) {
console.log (e);
}
console.log ("-- end --");
</script>
</body>
</html>
这显示了我原本想要做的事情。
我希望只有在我在代码中实际声明变量时才能定义变量。那么,这有什么目的,如果是这样,为什么变量名空间被DOM动态重载?
答案 0 :(得分:-3)
如果通过简单地调用其名称来检查尚未定义的变量,则会出现错误。
alert(foo); //error if not defined
您可以做的是检查其父命名空间。对于全局变量,这意味着window
。这不会出错,因为它将被解释为对属性的请求,并且未定义的属性未定义,而不是错误。
alert(window.foo); //undefined
foo = 'bar';
alert(window.foo); //'bar'