3

如果我的.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 甚至尚未声明?

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

4

3 回答 3

2

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

对于 null 与未定义 - 请参阅mouseover 和 mouseenter 事件之间的区别是什么?

于 2013-02-21T21:05:50.867 回答
0

第一个问题

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

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

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

第二个问题

在 JavaScript中,undefined变量是从未声明过或从未赋值过的变量。var a例如,假设您声明a will be undefined,因为它从未被分配任何值。

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

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

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

更多的?JavaScript 中的 null 和 undefined 有什么区别?

于 2013-02-21T21:17:49.103 回答
-1

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

我的猜测是您还没有等待 DOM 准备好,因此您的 clickButton 变量正试图过早地抓取一个元素并为空。尝试将它包装在 document.ready 或 window.onload 中,以便它在 DOM 完成加载时执行:-)。

window.onload(function() {
    var clickButton = document.getElementById("aButton");
});
于 2013-02-21T21:12:49.853 回答