在JavaScript中初始化全局变量

时间:2013-02-21 21:02:55

标签: javascript null global-variables undefined

如果我的.js文件顶部有以下行,当我调用使用clickButton的函数时,它会说null

在HTML

<input type="text" onkeydown="toggle()" id="txt1" />
<input name="aButton" id="aButton" type="button" value="ButtonVal" />

在JS中

//global variables
var clickButton = document.getElementById("aButton")
var state = false

function toggle()
{
  if(!state)
      /*here it says clickButton is null but if I put var clickButton = 
      document.getElementById("aButton") in this scope it works*/
      clickButton.disabled = true
  else
    clickButton.disabled = false
}

null和undefined之间的差异(不是我如何检查)是什么?是否已经声明了null但没有赋值,其中undefined甚至没有被声明?

我的意思是this question说“程序员没有分配任何内容的属性将是未定义的,但为了使属性变为null,必须将null显式赋值给它。”但我可以向你保证,我从来没有明确地将null赋予任何东西。

3 个答案:

答案 0 :(得分:2)

这意味着document.getElementById("aButton")返回null。具有指定ID的元素在dom中不可用,或者您的dom尚未就绪 - 请参阅https://developer.mozilla.org/en-US/docs/DOM/document.getElementById

对于null vs undefined - 请参阅What is the difference between the mouseover and mouseenter events?

答案 1 :(得分:0)

第一个问题

  • 请确保您的html文件中有这样的标记:

    <input name="aButton" id="aButton" type="button" value="ButtonVal" />
    
  • 确保在DOM准备好后调用该函数。所以,将链接js放在html页面的底部。或者在里面:

    if (document.readyState === "complete") { //codehere }
    

第二个问题

在JavaScript中,undefined变量是一个从未声明过或从未赋值的变量。我们假设你举例说明var a,那么a将是undefined,因为它从未被赋予任何价值。

但如果您再分配a = null,那么a现在将为空。在JavaScript中,null是一个对象(如果您不相信我,请在JavaScript控制台中尝试typeof null),这意味着null是一个值(实际上甚至undefined是一个值)。

您可以使用这些运算符来检查未定义的null。例如:

null === null            # => true
undefined === undefined  # => true
undefined === null       # => false
undefined == null        # => true

更多? What is the difference between null and undefined in JavaScript?

答案 2 :(得分:-1)

undefined和null确实是两种不同的类型。 null是一个对象,它引用一个已声明但已提供空值但在未声明的变量中未定义且本身不是对象的变量。

我的猜测是你没有等待DOM准备就绪,所以你的clickButton变量试图过早地抓取一个元素并获得null。尝试将它包装在document.ready或window.onload中,以便在DOM完成加载时执行: - )。

window.onload(function() {
    var clickButton = document.getElementById("aButton");
});