忍者javascript一书中的javascript练习

忍者javascript一书中的javascript练习,javascript,html,dom,Javascript,Html,Dom,这是本书(忍者javascript)中的一个例子 我不知道为什么console一直抱怨它不能附加到null document.getElementById("results").appendChild(li); 这就是我看到错误的地方。。我做错什么了吗 整个代码如下: <body> this.assert = function assert(value, desc) { var li = document.create

这是本书(忍者javascript)中的一个例子

我不知道为什么console一直抱怨它不能附加到null

        document.getElementById("results").appendChild(li);
这就是我看到错误的地方。。我做错什么了吗

整个代码如下:

            <body>
    this.assert = function assert(value, desc) {
        var li = document.createElement("li");
        li.className = value ? "pass" : "fail";
        console.log("this is ", value);
        console.log("that is ", desc);
        console.log("that is ", li);
       // console.log("that is ", className);
        //console.log("that is ", results);
        li.appendChild(document.createTextNode(desc));
        document.getElementById("results").appendChild(li);

        if ( !value ) {
            li.parentNode.parentNode.className = "fail";
        }
        return li;
    };

    function useless(callback) {return callback(); }

    var text = "Domo Arigato!";
    assert(useless(function() {return text;}) === text,
           "The useless function works! " + text); 
</script>


<ul id="results"></ul>
为什么上面需要===文本?它在这里有什么用途??
(我刚刚测试了并且没有===文本,它也可以工作..那么作者的意图是什么?

这是因为您的脚本在页面上存在
结果
id
元素之前执行

你可以:

  • 将脚本放在它后面
  • 窗口期间执行脚本。onload
    事件
  • 更合适的事件是事件

标记也没有打开。@krillgar但提到的错误似乎表明脚本确实运行了。同意。但这仍然应该得到解决。我有点惊讶它居然运行了,但是javascript让这么多的事情都过去了。很抱歉,我在这里粘贴错误地忽略了开头脚本。现在试试看这个建议。@krillgar缺少的
标记肯定不是JavaScript可以忽略的东西之一。
<script>
    window.onload = function () {
       function useless(callback) {return callback(); }

       var text = "Domo Arigato!";
       assert(useless(function() {return text;}) === text,
           "The useless function works! " + text); 

    }
</script>


<ul id="results"></ul>
assert(useless(function() {return text;}) === text,