5

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).

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

4

4 回答 4

17

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

通过在函数中使用“未定义”作为参数名称,您试图用传递给函数的任何内容对其进行变异。所以从技术上讲,错误在于浏览器采用标准的速度很慢,而 JSLint 是正确的。

于 2012-08-23T22:17:33.507 回答
5

你的方法确实有效。仅仅因为 JSLint 不喜欢它并不能使它成为一个大罪。

改用 JSHint (为了理智)。

于 2011-11-17T23:11:54.880 回答
0
(function() { var undefined = 'foo'; console.log(undefined, typeof undefined); })();

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

于 2019-04-12T08:17:48.547 回答
-3

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

function(undefined) {...}

需要命名为其他名称,例如

function(myVariable) {...}

更新

看起来它可能实际上并没有像我最初阅读的那样被保留,但也许它只是 JSLint 认为应该保留的一个术语......

于 2011-11-17T23:13:19.920 回答