JavaScript中的对象比较
Object comparisons in JavaScript
我想了解JavaScript标识和相等操作符的奇怪行为,如下所示。
var a = {};
var b = {};
a === b; //false
a == b; //false
var c = '';
var d = '';
c === d; //true
c == d; //true
四个变量a
, b
, c
和d
都是对象。但是当比较它们时,第一种情况为假,而第二种情况为真。
我从以下来源研究比较:https://msdn.microsoft.com/en-us/library/d53a7bd4(v=vs.94).aspx
根据上面的文章,除了数字和布尔值之外,所有的东西都是通过引用而不是值来比较的。第一种情况返回false,第二种情况返回true
示例中的c
和d
是字符串,它们是JavaScript中的基本类型,并按值进行比较。
因此,c == d
返回true
。
本文讨论的是使用new String('foo')
构造函数创建的字符串对象,该构造函数实际创建对象。在本例中,比较引用,返回false
。
console.log(new String('foo') == new String('foo')) // false
console.log('foo' == 'foo') // true
(原始)字符串是值类型(如Number)。因此,===
比较其值(相等)。
对象是引用类型,===
比较它们的标识。
字符串有点疯狂,因为既有原始字符串也有字符串对象(用new String("foo")
创建)。
==
的工作方式与===
相同,除了它进行类型转换以"尽可能使事物相等"。对于引用类型,这与===
相同,除了它还等同于基本字符串和String对象。
"abc" == new String("abc");
"abc" !== new String("abc");
相关文章:
- 使用javascript比较对象中的对象值和数组长度
- 角度深度比较对象(特定属性除外)
- 比较对象类型时是否需要第三个=
- 如何在 JavaScript 中使用 # 符号比较对象
- 使用isBetween函数比较对象中的键值
- 使用lodash比较对象并从数组中删除对象
- 按值比较对象
- 比较对象数组,最佳方式
- 比较对象中的元素
- 如何通过比较对象属性来查找列表中的对象
- JavaScript松散比较对象和字符串
- 是否有一个实用程序来深度比较对象在谷歌闭包库
- 使用Linq.js比较对象数组的每个成员
- 如何在推入数组之前比较对象
- 当比较对象时,有选择地控制角$watch的发射
- 比较对象并只获取存在于所有对象中的对象
- 为什么ava在比较对象列表和对象文本列表时失败
- 使用Lodash比较对象数组和整数数组
- 比较对象数组中的值与对象响应数组中的值
- AngularJS + Jasmine:比较对象