javascript - 为什么会出现这种情况?

标签 javascript

运行此代码会产生如注释中所示的结果,但为什么会发生这种情况?

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

谢谢!

最佳答案

请参阅this article它描述了 JavaScript 中不同类型的相等检查。

a == c; // true
b == c; // true

以上两者都返回 true,因为 ==导致数组使用其 toString 转换为其等效的字符串方法(因为使用 == 运算符将其与字符串进行比较),该方法返回 "1,2,3" 。显然"1,2,3"等于"1,2,3" .

a == b; // false

上面返回 false,因为 ab是两个不同的数组,JavaScript 通过引用来比较它们,而不是遍历每个元素并单独比较它们或将它们转换为等效字符串。

关于javascript - 为什么会出现这种情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50178437/

相关文章:

javascript - document.getElementById ('' ).length = 0 在Win7下不起作用

javascript - 模拟 CTRL+W onclick 元素

javascript - 在哪里添加 Angular 6 中的页面特定脚本?

javascript - 有没有一种方法可以将所有潜在参数保存在一个数组中?

javascript - 我对这段代码有疑问,它适用于一款名为“ war ”的纸牌游戏

javascript - 当用户点击内部链接时显示 html 页面的一部分

javascript - 使用 Nightwatch 测试注释和 Doctype

javascript - GAS 将后端脚本与页面加载同步

javascript - 如何传递数组并在 React Lifecycle 中访问它

javascript - 不正确的范围高度,是 1 但应该是 344 - 当尝试使用 .setValues() 将范围带到另一张纸时