5

!==null または undefined かどうか、およびor!=と "undefined" または undefinedを使用する必要があるかどうかを確認するときに、少し混乱しています。

ここに私が取り組んでいるいくつかのコードがあります。null/unudefined などのどこで問題が発生していますか?

var c = (jQuery(this).prop("target") != null && jQuery(this).prop("target") != undefined && jQuery(this).prop("target").toLowerCase() == "_blank") ? 1 : 0;

ありがとう

4

7 に答える 7

14

一般的には、シンプルにしてください。

を確認するにはundefined、次を使用します。

foo === undefined
foo !== undefined

を確認するにはnull、次を使用します。

foo === null
foo !== null

どちらかを同時に確認するには、次を使用します。

foo == null
foo != null

いずれにせよ、あなた.prop()を変数に保存して、きれいに保ちます。しかし、あなたの場合、それが に等しい場合、または"_blank"ではないことがわかります。nullundefined

var targ = jQuery(this).prop("target").toLowerCase();

var c = targ === "_blank" ? 1 : 0;

booleanまたは、を aに強制することで、さらに短くすることもできますnumber:

var targ = jQuery(this).prop("target").toLowerCase();

var c = +(targ === "_blank");

これらの最後の 2 つのソリューションは、.prop()が常に を返すため安全stringです。

于 2013-02-21T06:37:43.113 に答える
6
  • nullとはどちらundefinedも「偽の」値であるため、ブール値のようにチェックできます。したがって、それらがそのような値であるかどうかを知る必要がある特定の状況を除いて、null比較しても意味がありません。undefined

  • 比較するときは、厳密な比較 ( など) を使用することをお勧めし===ます!==

  • 条件の&&は、前の条件が「偽」である場合、次の条件を評価しません。

  • thisDOM オブジェクト (おそらく) であり、プロパティ<a>を取得しようとしているため、jQueryも必要ありません。target

最終的には:

var c = (this.target && this.target.toLowerCase() === "_blank") ? 1 : 0;
于 2013-02-21T06:36:54.137 に答える
1

これは undefined をチェックする最良の方法です:

if(typeof variable_here != 'undefined'){
   // your code here.
 };

そして、これはnullをチェックする最良の方法です:

if(variable_here !== null){
       // your code here.
     };

したがって、コードは次のようになります。

var c = (jQuery(this).prop("target") !== null && typeof jQuery(this).prop("target") !== 'undefined' && jQuery(this).prop("target").toLowerCase() == "_blank") ? 1 : 0;
于 2013-02-21T06:38:34.810 に答える
0

undefined は変数の型になるため、使用しますtypeof

var c = (
 $(this).attr("target") != NULL && 
 typeof $(this).attr("target") != "undefined" && 
 $(this).attr("target").toLowerCase() == "_blank"
) ? 1 : 0;

ただし、最後のチェックだけが必要だと思います。ターゲット"_blank"は であるc必要があり1、そうでない場合は0です。が設定されているかどうかは本当に重要targetですか?

また、attr()メソッドを使用して属性を取得しprop()ます。selectedIndextagName

于 2013-02-21T06:34:56.983 に答える
0

値を確認するためだけに、同じプロパティを 3 回取得しないでください。

var c = 0;
var prop = $(this).prop("target");
if(prop && prop.toLowerCase() === "_blank") c = 1;
于 2013-02-21T06:35:21.483 に答える