9

JSLintと混同しています。

div:jqmData("me")私のコードは元々 、次のように未定義かどうかをチェックしていました。

if ( typeof el.jqmData("me") == "undefined"  
   ? el.not(':jqmData(panel="main")').length > 0 
    : el.not(':jqmData(me="first")').length > 0 ){

}

JSLintは、チェックをに置き換える必要があると文句を言っているtypeofので===、次のようにしました。

if ( el.jqmData("me") === "undefined"  
   ? el.not(':jqmData(panel="main")').length > 0 
     : el.not(':jqmData(me="first")').length > 0 ){

}

JSLintはもう文句を言いませんが、ネストされたifステートメントが壊れてel.not(':jqmData(me="first")').lengthいます。これは、必要がない場合でも、常に2番目になってしまうためです。

質問: JSLintが推奨するの
はなぜですか?どうしてこれが私の論理を壊すのですか?===typeof == undefined

いくつかの啓発をありがとう...

4

2 に答える 2

6

比較ロジックが壊れています。使用することを前提としています

typeof el.jqmData("me") === "undefined"  

また

el.jqmData("me") === undefined

個人的には後者を選びます。

そして個人的には、この特定のケースでのこの特定のJSLintチェックはあまり意味がないと思います。

于 2012-11-02T22:47:48.003 に答える
0

zerkmsが書いたことは正しいです。ただし、 https: //github.com/jamesallardice/jslint-error-explanations/issues/10#issuecomment-18273885から説明が役立ちます。

undefined比較すると、スタイルの近代化が起こっています。ES5はそれを保証しundefinedますundefined。厳密モードでは、新旧のスタイルと比較して、typeof "undefined"チェックの入力が長くなり、未定義を直接比較できるようになったため、チェックが不要になりました。

JSLintのディスカッションを参照してください: https ://plus.google.com/101248256976407044060/posts/Q5oFnnxG9oL

Crockfordは基本的に、typeof "undefined"チェックは長くて遅く、不要であると言っています。

于 2015-08-19T06:41:24.937 に答える