【发布时间】:2018-10-15 03:33:57
【问题描述】:
运行此代码会产生与 cmets 一样的结果,但为什么会这样?
let a = [1,2,3];
let b = [1,2,3];
let c = '1,2,3';
a == c; // true
b == c; // true
a == b; // false
我注意到如果您使用以下最终结果更改之前的代码:
let a = [1, 2, 3];
let b = [1, 2, 3];
let c = '1, 2, 3';
a == c; // false
b == c; // false
a == b; // false
谢谢!
【问题讨论】:
-
因为
a==c和b==c将数组转换为字符串,所以第三个比较两个数组的引用(不相等)。见here -
使用 === 进行严格比较
-
强制相同类型。当将原始元素(如字符串、数字或布尔值)与复杂元素(如对象、函数或数组)进行比较时,后者将被转换为最近的原始元素(字符串)。在比较复杂元素时,您实际上是在检查两侧是否是对相同元素的引用(而不是对象看起来是否相同)。
-
您是在问为什么是
[1,2,3] == '1,2,3',还是为什么是[1,2,3] != [1,2,3]?这是两个不同的问题。 -
@Bergi 两个单独的问题,这两个问题的答案都是“不要使用损坏的语言功能”;)
标签: javascript