2012-12-14 11 views
5

2つのオブジェクトが等しい場合に最も簡単にチェックインする方法はありますか?私は方法がないことに気づいたExactEqual()のように、私はそれを手動で行うべきかどうか疑問に思います。TypeScriptとExactEqual

ありがとうございました!

答えて

12

このような方法はありません。このjqfaq.comのリンクを参照してください。ここでは、それが議論され、最も良い方法を確認しました。これはタイスクリプトとjavascriptの両方に適しています。希望、それはあなたを助ける!。

その答えの中で最も重要な部分を引用するには: `is_ab_eql`は本当に何も説明していないため説明

//“===” means that they are identical. 
//“==” means that they are equal in value. 
//(==) 
//Each JavaScript value is of a specific “type” (Numbers, strings, Booleans, functions, and objects). So if you try to compare a string with a number, the browser will try to convert the string into a number before doing the comparison. 
//So the following will return true. 
55 == “55″ //true 
0 == false //true 
1 == true //true 
//(===) 
//The === operator will not do the conversion, if two values are not the same type it will return false. In other words, this returns true only if the operands are strictly equal in value or if they are identical objects. 
55 === “55″ //false 
0 === false //false 
1 === true //false 
var a = [1, 2, 3]; 
var b = [1, 2, 3]; 
var c = a; 
var is_ab_eql = (a === b); // false (Here a and b are the same type,and also have the same value) 
var is_ac_eql = (a === c); // true. 
//Value types (numbers): 
//a === b returns true if a and b have the same value and are of the same type. 
//Reference types: 
//a === b returns true if a and b reference the exact same object. 
//Strings: 
//a === b returns true if a and b are both strings and contain the exact same characters. 
var a = “ab” + “c”; 
var b = “abc”; 
a === b //true 
a == b //true 
//in thiss case the above condition will fail 
var a = new String(“abc”); 
var b = “abc”; 
a === b //false 
a == b// true 
//… since a and b are not a same type. 
typeof “abc”; // ‘string’ 
typeof new String(“abc”)); // ‘object 
+1

を。それらは同じ型であり、同じ値を持ちますが、 '==='は 'false'を返します。どうして? – n0rd