我尝试通过检查是否定义了特定的变量来读取JavaScript的当前状态:
if (app!=未定义) {...}
令我惊讶的是,app最终被定义并引用了DOM中具有id="app“的元素。
一旦JavaScript设置了自己的变量,这个引用就消失了。删除变量将返回dom-reference。
怎么回事?或者,给出一个更具体的问题:为什么会这样,它是如何定义的,如果变量没有定义,那么我如何检查该变量的存在,而不管DOM中包含哪些ID?
埃塔: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动态重载?
发布于 2018-06-04 01:07:05
如果您检查一个没有通过简单地调用它的名称来定义的变量,您将得到一个错误。
alert(foo); //error if not defined
你能做的就是检查它的父命名空间。对于全局变量,这意味着window
。这不会出错,因为它将被解释为对属性的请求,而未定义的属性返回时未定义,而不是错误。
alert(window.foo); //undefined
foo = 'bar';
alert(window.foo); //'bar'
https://stackoverflow.com/questions/50668875
复制相似问题