web-dev-qa-db-ja.com

jQueryで未定義でnullかどうかを確認する

Nullか未定義か、!==または!=と「未定義」または未定義を使用する必要があるかどうかを確認するときに、少し混乱します。

これが私が取り組んでいるいくつかのコードです。 null/unudefinedなどでどこが間違っているのですか?

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

ありがとう

4
K Groll
  • nullundefinedはどちらも「偽の」値であるため、ブール値であるかのようにチェックできます。したがって、nullおよびundefinedと比較しても、それらがそのような値であるかどうかを知る必要がある特定の状況を除いて、意味がありません。

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

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

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

最終的には:

var c = (this.target && this.target.toLowerCase() === "_blank") ? 1 : 0;
5
Joseph

一般的に、それは単純にしてください。

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

_foo === undefined
foo !== undefined
_

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

_foo === null
foo !== null
_

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

_foo == null
foo != null
_

いずれにせよ、.prop()を変数に格納してクリーンに保ちます。しかし、あなたの場合、それが_"_blank"_に等しい場合、それがnullまたはundefinedではないことがわかります。したがって、次のようになります。

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

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

または、booleannumberに強制変換することで、さらに短くすることもできます。

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

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

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

11
the system

これは、未定義をチェックするための最良の方法です。

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;
1
Code.Town

未定義は変数タイプになるため、typeofを使用します

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

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

また、selectedIndextagNameのようなプロパティの場合はprop()なので、属性を取得するには attr() メソッドを使用します。

0
Lg102

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

var c = 0;
var prop = $(this).prop("target");
if(prop && prop.toLowerCase() === "_blank") c = 1;
0
Aesthete

私はあなたの質問に関係がないがあなたを助けるこのようなものを手に入れました

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

targがnullかundefinedかを確認したい場合

 var c = (!targ || "") ? 1 : 0

これがお役に立てば幸いです

0
Rohidas Kadam

JavaScriptでは、次の理由により、変数がnullまたは未定義かどうかを明示的にチェックする必要はありません。

  1. nullまたはundefinedは、ブール式でfalseを返します。

  2. JS式は左から右に評価されます。だから|| b、aが偽の場合、bのみが評価されます。ただし、aが真の場合、bはチェックされません。同様に、a && bの場合、aが偽の場合、bは評価されません。

したがって、if(a!= null){"dosomething"}は(a){"dosomething"}または単に&& "dosomething"のように書くことができます。

同様に、値がnullまたは未定義に設定されている場合は、デフォルト値を設定するために使用できます。

function someFunction(age){
    var age= age|| 18;
}

参照: https://codereview.stackexchange.com/questions/472/usage-of-the-ternary-operator-with-functions-listening-to-click-events

0
Prince Prasad