javascript将HTML-ID识别为“已定义”?

时间:2018-06-03 17:03:27

标签: javascript html dom

我试图通过检查是否定义了一个特定变量来读取我的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动态重载?

1 个答案:

答案 0 :(得分:-3)

如果通过简单地调用其名称来检查尚未定义的变量,则会出现错误。

alert(foo); //error if not defined

您可以做的是检查其父命名空间。对于全局变量,这意味着window。这不会出错,因为它将被解释为对属性的请求,并且未定义的属性未定义,而不是错误。

alert(window.foo); //undefined
foo = 'bar';
alert(window.foo); //'bar'