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 Edition 5 セクション 15.1.1.3で、グローバル オブジェクトの不変プロパティとして宣言されました。

関数のパラメーター名として「未定義」を使用することにより、関数に渡されたものでそれを変更しようとしています。技術的には、エラーはブラウザーが標準を採用するのが遅いことにあり、JSLint は正しいです。

于 2012-08-23T22:17:33.507 に答える
5

あなたの方法はうまくいきます。JSLintが気に入らないからといって、大罪にはなりません。

代わりにJSHintを試してください(健全性を高めるため)。

于 2011-11-17T23:11:54.880 に答える
-3

undefinedは予約語です。変数に名前を付けようとするようなものですfalseまたはtrue. 関数に渡す値:

function(undefined) {...}

次のように、別の名前を付ける必要があります

function(myVariable) {...}

アップデート

私が最初に読んだように実際には予約されていないように見えますが、おそらくそれはJSLintが予約すべきだと考えている用語です...

于 2011-11-17T23:13:19.920 に答える