Unexpected 'typeof'. Use '===' to compare directly with undefined.
if (typeof exports !== 'undefined') {
これはbackbone.jsのコードです。
構文が気に入らないようです。
jslint.comを幸せにするためにこのコードを変更するにはどうすればよいですか?
Unexpected 'typeof'. Use '===' to compare directly with undefined.
if (typeof exports !== 'undefined') {
これはbackbone.jsのコードです。
構文が気に入らないようです。
jslint.comを幸せにするためにこのコードを変更するにはどうすればよいですか?
Underscore ライブラリ (Backbone と CoffeeScript を作成したのと同じ人物によって作成されたので、よく考え抜かれたものであることがわかります) は、次のisUndefined
機能を使用します。
obj === void 0
完全に安全な (誰かが を再定義するという変則的なケースであってもundefined
) アプローチが必要な場合でも、気難しい年寄りの Crockford (JSLint を書いている人) を満足させるには、そのチェックを使用します。見栄えが悪いので、せめて説明コメントを付けておきます。
さらに良いことにisUndefined
、Underscore のような独自の関数にロールアップすることもできます。または、最初から Underscore の関数を使用することもできます。Backbone を使用している場合は、Backbone が必要とするため、既に Underscore があります。
jsLint は、トリックundefined
を使用する代わりに との直接比較を期待しているように見えます。typeof foo === "undefined"
を使用しtypeof exports === "undefined"
ても同じエラーが発生しますが、exports === undefined
パス jsLint を使用すると次のようになります。
var exports;
var test;
if (exports === undefined) {
test = "foobar";
}
これは をチェックするためのよりクリーンな方法であり、おそらくやundefined
のような間違いが起こりにくいでしょう。exports === "undefined"
typeof exports === undefined
undefined が再定義されていないことを確認するには:
var is_undefined=(function(undefined){
return function(a){return a===undefined;};
}(/*omitted argument is undefined*/));
省略された引数は未定義であるという事実を利用しています。
アップデート
もっと簡単な方法は
function is_undefined(x){return x===[][0];}
関数や代替手段を使用せずに JSLint を満足させるにはどうすればよいかという最初の質問に答えるためにtypeof
。
を使用した結果を宣言することで、JSLint エラー メッセージを回避できますtypeof
。
var hasExports = typeof exports;
if (hasExports !== 'undefined') {
//...
}
jsLint を気にしない関数を作成できます。
function getTypeof(obj) {
'use strict';
return typeof obj;
}
次に、typeof を直接使用する代わりに、getTypeof 関数を呼び出すことができます。
var exports,
test;
if (getTypeof(exports) === "undefined") {
test = "foobar";
}
余分な作業がたくさんあるように思えますが、Crockford が if ステートメントで typeof を使用することに反対している理由はまだわかりません。