ここに1つあります:
var x = ['H', 'e', 'l', 'l', 'o'];
x.toString = function() {
return this.join("");
}
alert(x == "Hello"); // true
http://jsfiddle.net/jfriend00/KSgwb/
または別の:
var x = {
toString: function() {return "Hello";}
}
alert(x == "Hello"); // true
http://jsfiddle.net/jfriend00/hKx9x/
の強制規則を==
調べると、満足できる唯一のものは、すでに文字列である==
何か、またはを返すメソッドを持つ何かであることがわかります。 "Hello"
"Hello"
.toString()
"Hello"
これは、配列を結合する、文字列を直接返す、結合してその文字列を形成する一連の文字コードを処理するなど、必要なだけ多くの創造的な方法で実行できます...しかし、最終的には順番.toString()
に戻る必要がありますテスト"Hello"
を満たすために。==
比較対象のものを何らかの方法で含めることを許可していない場合、または要求に応じてその文字列を生成できない場合は、強制するように求められたときに文字列を生成するものを除いて、"Hello"
満足するものは他にありません文字列。==
"Hello"
Javascript の型強制規則の素人向けの説明は次のとおりです。
簡単に言えば、文字列が関係する場合の強制ルールは次のとおりです。
両方の型が文字列の場合、比較はtrue
2 つの文字列にまったく同じ文字が含まれている場合にのみ行われます。
一方が文字列で、もう一方が数値の場合は、文字列を数値に変換して、それを他の数値と比較してみてください。Number("Hello")
isであるため、 NaN は別の数値にNaN
できないため、これは数値に対しては決して機能しません。==
一方が文字列で、もう一方がオブジェクトのvalueOf
場合、内部メソッドが定義されているか定義されtoString
ていない場合は呼び出し、その結果を文字列と比較します。
一方が文字列で他方がブール値の場合、両方を数値に変換して比較します。Number("Hello")
isであるため、数値に変換されたときにまたはにNaN
なるブール値には決して一致しません。例: .0
1
true == "1"