如何以及为什么[1,2,3] =="1,2,3"在JavaScript中返回true?

Bru*_*tti -1 javascript

我想知道为什么会发生这种情况,"a"的原始价值是什么?

a = [1,2,3]
b = "1,2,3"
a==b //this returns true
Run Code Online (Sandbox Code Playgroud)

据我所知,在做这个时,a的原始类型与b进行比较.

编辑:

根据"使用==的松散等式"部分 将对象(a)与字符串(b)进行比较时,以下规则有效:

ToPrimitive(A)尝试通过在A上调用A.toString和A.valueOf方法的不同序列来尝试将其对象参数转换为原始值.

不知道"ToPrimitive(A)"如何运作至关重要.

cod*_*tex 9

它返回true是因为您没有使用严格比较运算符===.

使用时==你实际上在做[1,2,3].toString() === '1,2,3'

平等(==)(来源)

如果操作数不是同一类型,则等于运算符会转换操作数,然后应用严格比较.如果两个操作数都是对象,则JavaScript比较内部引用,当操作数引用内存中的同一对象时,这些内部引用相等.

身份/严格平等(===)(来源)

如果操作数严格相等(见上文)且没有类型转换,则identity运算符返回true.

console.log('[1,2,3] == "1,2,3"', [1,2,3] == "1,2,3");

console.log('[1,2,3] === "1,2,3"', [1,2,3] === "1,2,3");

console.log('[1,2,3].toString() === "1,2,3"', [1,2,3].toString() === "1,2,3");
Run Code Online (Sandbox Code Playgroud)

抽象等式比较算法(源码)

比较x == y,其中x和y是值,产生真或假.这样的比较如下进行:

1.如果Type(x)与Type(y)相同,那么

____ a.如果Type(x)是Undefined,则返回true.

____ b.如果Type(x)为Null,则返回true.

____ c.如果Type(x)是Number,那么

________ i如果x是NaN,则返回false.

________ ii如果y是NaN,则返回false.

________ iii如果x与y的数值相同,则返回true.

________ iv如果x为+0且y为-0,则返回true.

________ v如果x为-0且y为+0,则返回true.

________ vi返回false.

____ d.如果Type(x)是String,则如果x和y完全相同的字符序列(相应位置的相同长度和相同字符),则返回true.否则,返回false.

____ e.如果Type(x)是布尔值,如果x和y都为true或两者都为false,则返回true.否则,返回false.

____ f如果x和y引用同一个对象,则返回true.否则,返回false.

2.如果x为null且y 未定义,则返回true.

3.如果x 未定义且y为null,则返回true.

4.如果Type(x)为Number且Type(y)为String,则返回比较结果x == ToNumber(y).

5.如果Type(x)是String并且Type(y)是Number,则返回比较结果ToNumber(x)== y.

6.如果Type(x)是布尔值,则返回比较结果ToNumber(x)== y.

7.如果Type(y)是布尔值,则返回比较结果x == ToNumber(y).

8.如果Type(x)是StringNumber而Type(y)是Object,则返回比较结果x == ToPrimitive(y).

9.如果Type(x)是Object而Type(y)是StringNumber,则返回比较结果ToPrimitive(x)== y.

10.返回false.

  • 您可以添加表格的链接:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness (2认同)