27

重複の可能性:
暗黙の文字列比較、0=''、ただし 1='1'

JavaScript で次のケースを実行すると、'' (空の文字列) に等しい 0 が得られます。

var a   =   0;
var b   =   '';//empty string
if(a==b){
    console.log('equal');//this is printed in console
}else{
    console.log('not equal');
}

この背後にある理由は何ですか?

4

9 に答える 9

48

ドキュメントの引用 ( MDN ):

等しい (==)

2 つのオペランドが同じ型でない場合、JavaScript はオペランドを変換してから、厳密な比較を適用します。オペランドのいずれかが数値またはブール値の場合、可能であればオペランドは数値に変換されます。そうでなければ、どちらかのオペランドが文字列の場合、可能であればもう一方のオペランドが文字列に変換されます。

ここでのaオペランドの型は であるためNumberbNumber にも変換されます。とNumber('')評価され0ます。

これは時々非常に驚くべきことです。たとえば、次のように考えてください。

console.log(0 == '0');  // true
console.log(0 == '');   // true
console.log('' == '0'); // O'RLY?

...またはこれ:

console.log(false == undefined); // false
console.log(false == null);      // false
console.log(null == undefined);  // fal.... NO WAIT!

===...そしてそれが、代わりに(厳密な等値)演算子を使用することがほとんど常に推奨される理由です。

于 2012-09-14T09:50:18.330 に答える
6

0""(空の文字列)、false型キャストされた場合、技術的にはすべて同じ値になります。それらを厳密に扱う必要がある場合は、 を使用できます===

これは、PHP などの類似のプログラミング言語でも同じです。

var a = 0;
var b = ''; //empty string
if(a == b){
    console.log('equal'); //this is printed in console
}else{
    console.log('not equal');
}

厳密な比較を行うには:

if(a === b){
    console.log('equal');
}else{
    console.log('not equal'); //this is printed in console
}
于 2012-09-14T09:51:32.187 に答える
2

==javascript の演算子は型を比較しないため、0=='' === true(数値文字列''が 0 に評価されるため) または0==false === true(boolfalseが に評価されるため) 型を比較して、演算子0を使用できます。===

ここでは、比較に関する有用な情報を見つけることができます。

于 2012-09-14T09:50:28.927 に答える
1

ほとんどのプログラミング言語 (javascript を含む"") では、(string)、0(integer)、\x0(null) はほとんど同じことを意味します: 「空」。整数に変換されるため、 javascript エンジンが"" == 0false を検出します。これも false であるため、null に変換されますが、これは false であり、空の文字列に変換されます。(これが変換の正しい順序であるかどうかはわかりません)。条件を「完全に」一致させる(変換なし)には、代わりに使用します==000=====

于 2012-09-14T09:50:38.947 に答える
1

== は型キャストを行います。常に=== を使用してください。

あなたの例では、空の文字列 b が 0 に変換されています。したがって、a と b は同じです。

于 2012-09-14T09:50:48.387 に答える
1

数値として表される空の文字列はゼロであるためです。リンゴとオレンジを比較する場合は、特定のオレンジがリンゴだった場合にどのように見えるかを考える必要があります.

于 2012-09-14T09:51:05.297 に答える
1

強要のため。通常は===、JavaScript での比較に使用することをお勧めします。

于 2012-09-14T09:51:05.357 に答える
1

==値の等価性をチェックするため、 so 、falseおよび0空の文字列は等しいためです。ID チェックを使用し===ます。

于 2012-09-14T09:51:10.013 に答える
1

Javascript は、比較のために異なる型の変数を自動的に変換します。これは、厳密に型指定されていない言語では一般的な機能です。

変数を比較して型を確認する必要がある場合は、===演算子を使用します。

于 2012-09-14T09:50:25.657 に答える