JSLint抱怨重新定义undefined

时间:2011-11-17 23:07:50

标签: javascript jslint reserved-words

undefined在技术上可以重新定义,因此它不是保留字。因此,我通常在匿名函数中编写代码,强制undefined为未定义的变量,如下所示:

(function (undefined) {
    "use strict";
    var o = {
        test: "testvalue"
    };
    if (o.test === undefined) {
        // Do stuff here
    } else {
        // Do other stuff there
    }
}());

但是,JSLint提到了以下错误:

Problem at line 1 character 15: Expected an identifier and instead saw 'undefined' (a reserved word).

当代码可以随意重新定义变量时,为什么JSLint会抱怨undefined是一个保留字?我知道你可以使用typeof x === "undefined";我只是想知道为什么这种方法不起作用。

4 个答案:

答案 0 :(得分:17)

'undefined'在2009年12月发布的ECMA-262 Edition 5 Section 15.1.1.3中被声明为全局对象的不可变属性。

通过在函数中使用'undefined'作为参数名,您试图使用传递给函数的任何内容来改变它。从技术上讲,错误在于浏览器采用标准的速度很慢,而且JSLint是正确的。

答案 1 :(得分:5)

您的方法 有效。仅仅因为JSLint不喜欢它并不会使它成为一个主要的罪。

请尝试JSHint(为了更加理智)。

答案 2 :(得分:0)

(function() { var undefined = 'foo'; console.log(undefined, typeof undefined); })();

根据MDN,它实际上不是JavaScript中的保留字,可以重新定义。

答案 3 :(得分:-2)

undefined是保留字。这就像尝试命名变量falsetrue一样。您传递给函数的价值:

function(undefined) {...}

需要被命名为其他内容,例如

function(myVariable) {...}

<强>更新

看起来它实际上可能不会被保留为I originally read,但它可能只是JSLint认为应该保留的术语......