JavaScript中==运算符比较数组与字符串结果差异的原因咨询
为什么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
a == c和b == c为true的原因:
当用==比较**数组(引用类型)和字符串(基本类型)**时,JavaScript会先把数组转换成字符串再比较。数组的toString()方法会把元素用逗号直接拼接起来,[1,2,3].toString()的结果就是'1,2,3',和变量c的字符串完全一致,所以比较结果为true。a == b为false的原因: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为false的原因:
这里的数组[1, 2, 3](元素间有空格)调用toString()后,结果依然是'1,2,3'(划重点:数组的toString()不会保留元素之间的空格!),而变量c是'1, 2, 3'(每个逗号后面都有空格),两个字符串内容不匹配,所以比较结果为false。a == b还是false的原因:
和第一个场景一样,两个数组是不同的引用对象,内存地址不同,所以==比较依然返回false。
小建议
为了避免这种隐式类型转换带来的意外,日常开发中尽量使用严格相等运算符===,它会同时比较值和类型,不会自动做类型转换,结果更符合直觉。
内容的提问来源于stack exchange,提问作者blurstream
相关产品推荐
相关产品推荐

