-1

以下のステートメントに違いはありますか?

  1. if(newValue && newValue != '')
  2. if(newValue != '')

私は多くのスクリプトで式1を観察しましたが、常に混乱していました。

手伝ってください!

4

3 に答える 3

3

if(newValue && newValue!='')。

nullこれは、またはの値から保護しますundefined

可能な、、、、およびのうち''0最後のfalse2つだけが(を使用して)等しくないため、追加の条件が必要です。undefinednull''!=

console.log(null && null != '') // null -> falsy
console.log(null != '') // truthy

var undef = void 0;

console.log(undef && undef != '') // undefined -> falsy
console.log(undef != '') // truthy
于 2012-12-28T14:11:50.320 に答える
1

答えはノーです。

1) の場合(newValue && newValue != '')、newValue が存在するかどうか (偽でない値) と空でないかどうかをチェックします

2) の場合if(newValue != '')、newValue が空でないかどうかのみをチェックします。

于 2012-12-28T14:09:00.450 に答える
0

すでに投稿された回答に追加する価値があると思ったもう1つの薄い.
あなた、OP が言うように: あなたは既存のコードで最初の式を何度も見たことがあるので、おそらく次のようなものを見たことがあるでしょう:

if (foo && foo.bar)
{
    foo.bar();
}

この場合、これは特定のブラウザでのエラーを回避するためです。最近のほとんどのブラウザーでは、次のようなものにアクセスしlocalStorage.doesNotExistてもエラーは発生しませんが、すべてのブラウザーがこれをサポートしているわけではないため、最初にlocalStorageオブジェクトが存在するかどうかを確認し、存在する場合は、プロパティを偽でない値に解決できるかどうかを確認します。

オブジェクトのメソッドにも同じロジックが適用されますが、ブラウザによって異なる場合があります。

var domElement = document.getElementById('foobar');//might not exist, though
if (domElement && domElement.addEventListener)
{//does element exist && does it have a method called addEventListener
    domElement.addEventListener('click', functionRef, false);
}
else if (domElement && domElement.attachEvent)
{
    domElement.attachEvent('onclick', functionRef);
}

if ステートメントの最初を省略してdomElement単に と書くdomElement.addEventListenerと、 TypeErrorをスローする書き込みと同じになる可能性があります (プリミティブ値のプロパティにアクセスしようとしているため)。null.addEventListener

于 2012-12-28T14:59:11.263 に答える