2016-11-08 5 views
2

JavaScriptでいくつかの比較をしています。私は、このインスタンスでinputが1に制限され、選択可能なオプションの数と<select multiple>だった。しかし、それは変更せずに働いていたので、私は、何かを変更する必要があります期待1つの要素が要素と等しい配列ですか?

if (input.val() != input.data('original')) 
    //do stuff 

:私はこのようないくつかのコードを上書きコピー。

私がチェックし、それはことが判明:私は比較は、配列をアンラップすることを期待していなかった

13 == [13] //true 
13 === [13] //false 

これは、私が使用して頼りにしているJavaScriptの意図された文書化された機能ですか?それとも、ブラウザの開発者の中には、これを動作させることにしたので、これは私にとってはうまくいくのですか?

+1

'=='の仕様を参照してください。これは、あなたが常に '==='を使うべき多くの理由の一つです。 – SLaks

+0

'+ [13]'の場合も 'parseInt(13,10)=== 13 'なので、その配列を数値に強制すると' 13'が返され、非厳密な型強制を比較すると – adeneo

+0

@SLaksできませんでしたそれを見つけると、 '=='は最もgoogleableな文字列ではありません。私は、この動作を明示的にリソースを見つけることができませんでした。 –

答えて

2

ObjectNumber

がA.toString及びA.種々のシーケンスを呼び出すため>試みることによって、プリミティブ値へのオブジェクト引数を変換しようと

上のvalueOfメソッドそれでは、あなたが実際にそれを行うことによって得る:

13 == [13] 

は次のとおりです。

13 == ([13].toString().valueOf()) 
0

これはjavascriptの仕組みです。 5 == '5' == true。 5 == [5]も該当します。

これらの例を見てください。 http://www.w3schools.com/js/js_comparisons.asp \

==演算子は、必要な型変換を行った後、等価性を比較します。 ===演算子は変換を行わないので、2つの値が同じ型でない場合、===は単にfalseを返します。

==は、同様のタイプの両方の値を変換して、どのように==変換作品やチャートの詳細ここ=== 読むと同じ比較を使用します。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness

+0

リンクしたリソースの '[5]'やコンバージョンについては何も見ません。 –

+0

@Juris私は例にリンクしていました。リンクの後に '=='を使ってどのように型変換が行われるかを説明しました。 –

+0

「必要な」コンバージョンはどのように選択され、どのコンバージョンが異なる場合に選択されますか?それがどこに文書化されているか知っていますか? –

3

いいえ、要素が文字列かどうかによって異なります。

1つの要素の結果は、toStringメソッドの結果です。これは、1つの要素が要素と同じように見えます。しかし、結果は常に文字列ですが、値は文字列ではない可能性があります。

あなたは等価演算子があればオペランドを変換し、標準ECMA 262 Version 5.1

Equality == (MDN)

で顔をしているかもしれません評価の順序について配列

array toString value 
------- -------------- 
    [1]    '1' 
[1, 2]   '1,2' 

と例彼らはサムのではないですeと入力し、厳密な比較を適用します。 両方のオペランドがオブジェクトである場合、JavaScriptはオペランドがメモリ内の同じオブジェクトを参照するときに等しい内部参照を比較します。比較するために使用されるloose equality (==)

+0

'=='はいつも 'toString'を使うのですか?あるいは、特定の場合には? –

+0

いいえ、順序は厳密な比較が可能かどうかをチェックし、 'toString'メソッドの値をチェックすることです。 –

関連する問題