判定方法: 1. 等価演算子「==」または「===」を使用する; 2. 配列内の toString() メソッドを使用する; 3. 「Object.is()」メソッドを使用する; 4 、まず「JSON.stringify()」を使用してオブジェクトまたは配列を文字列型に変換し、次に等価比較に「===」を使用します。
このチュートリアルの動作環境: Windows 7 システム、ECMAScript バージョン 6、Dell G3 コンピューター。
変数が等しいかどうかを判断するには、大まかに次の方法があります
==
および ===
; toString
メソッドを使用します; の
Object.is メソッド;
を使用して、比較のために
String 型に変換します。
#== および ===
#==
=== は厳密な比較演算子です。データ型が同じ場合、通常は
== を使用しても問題は発生しません。
let num = 5; let num2 = 5; num == num2;//true num === num2;//true
ただし、データ型に一貫性がない場合、
== は暗黙的な型変換を実行します。 let num = 5; let str = '5'; num == str;//true num === str;//false '' == false;//true '' === false;//false null == undefined;//true null === undefined;//false
暗黙的な変換タイプはある程度の利便性をもたらしますが、見つけにくい
バグを引き起こす可能性もあるため、=== を使用することをお勧めします。比較用です。これが
TS が人気がある理由の 1 つです。
さらに、上記のリストはすべて基本的なデータ型の比較であり、
===
let a = {xx: 1}; let b = a; a === b;//true let c = {xx: 1}; let d = {xx: 1}; c === d;//false
参照型を比較する場合、
=== は値 ではなく、変数の参照が同じかどうかを比較します。参照が異なる場合は false
が返されます。 ===
は無敵になる特効薬ではないことがわかります。オブジェクトが等しいかどうかを比較する場合、他のより信頼性の高い方法が必要です。
[推奨学習: JavaScript 上級チュートリアル
]
フロント エンドからバックエンド エンドからパラメータを渡す場合、バックエンドは と で区切られた複数のパラメータを必要とする場合があります。
Array toString メソッドの方が便利です。このメソッドは配列の比較にも使用できます。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;toolbar:false;">let arr = [1,3,5,7,9];
let arr2 = [1,3,5,7,9];
arr.toString() === arr2.toString();//true "1,3,5,7,9"</pre><div class="contentsignin">ログイン後にコピー</div></div>
ただし、2 次元以上の配列の比較には使用できず、null
、
、## を含めることはできないという制限があります。 #object##. #、function
など。そうしないと、次のようにエラーが発生しやすくなります。<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;toolbar:false;">[1,3,5,[2,4,6]].toString();//"1,3,5,2,4,6"
[1,null,undefined,&#39;&#39;,2].toString();//"1,,,,2"
[{xx:2},window,1,2].toString();//"[object Object],[object Window],1,2"</pre><div class="contentsignin">ログイン後にコピー</div></div>
Object.is method
Object.is は ES6 の新しいメソッドです。=== と非常によく似ており、2 つの値が等しいかどうかを比較するためにも使用されます。
Object.is(1,1);//true Object.is('str','str');//true Object.is({},{});//false
違いは、 0
と -0
、
と NaN
の判断にあります。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;toolbar:false;">+0 === -0 //true
NaN === NaN //false
Object.is(+0, -0) //false
Object.is(NaN, NaN) //true</pre><div class="contentsignin">ログイン後にコピー</div></div>
互換性の問題に対処する場合、ポリフィルは次のように記述できます。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;toolbar:false;">if (!Object.is) {
Object.is = function(x, y) {
if (x === y) {
// 针对+0 不等于 -0的情况
return x !== 0 || 1 / x === 1 / y;
} else {
// 针对NaN的情况
return x !== x && y !== y;
}
};
}</pre><div class="contentsignin">ログイン後にコピー</div></div>
JSON.stringify
JSON.stringify メソッドは、オブジェクトまたは配列を JSON 文字列に変換するために使用されます。 、結果の文字列はオブジェクトの比較に使用できます。 let obj = {name: 'lin', age: 24};
let obj2 = {name: 'lin', age: 24};
obj === obj2;//false
JSON.stringify(obj) === JSON.stringify(obj2);//true
は、===
がオブジェクトを正確に比較できないという制限を補いますが、一定の制限もあります。 ##、
、symbol
の値は無視されます。 さらに、
JSON.parse
と JSON.stringify
を使用すると、上記と同じ制限付きでオブジェクトのディープ コピーを実現できることにも言及する価値があります。
いつ使用するかシナリオが異なれば、要件も異なる場合があります。基本的なデータ型のみを比較する場合は、
で十分ですが、「一度だけ 」をしたい場合は、カスタム メソッドを使用するために一定のコストを支払う必要があるのは間違いありません。 日々繰り返される開発の中で、まだまだ探究する必要があります。
プログラミング関連の知識について詳しくは、プログラミング ビデオ
をご覧ください。 !
以上がJavaScriptで変数が等しいかどうかを判断する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。