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

时间:2017-09-20 13:13:01

标签: javascript

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

a = [1,2,3]
b = "1,2,3"
a==b //this returns true

据我所知,在执行此操作时,a的基本类型与b进行比较。

修改

根据"Loose equality using =="部分 将对象(a)与字符串(b)进行比较时,以下规则有效:

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

不知道" ToPrimitive(A)"工作至关重要。

1 个答案:

答案 0 :(得分:9)

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

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

  

平等(==)source

     

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

     

身份/严格平等(===)source

     

如果操作数严格相等,则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");

  

抽象等式比较算法source

     

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

     

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

     

____的一个即可。如果Type(x)为未定义,请返回 true

     

____的 B'/ strong>即可。如果Type(x)为 Null ,则返回 true

     

____ <强> C 即可。如果Type(x)为 Number ,则

     

________ 如果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

     

____的ë即可。如果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)是 Boolean ,则返回比较结果ToNumber(x)== y。

     

<强> 7 即可。如果Type(y)是 Boolean ,则返回比较结果x == ToNumber(y)。

     

<强> 8 即可。如果Type(x)是 String Number 而Type(y)是 Object ,       返回比较结果x == ToPrimitive(y)。

     

<强> 9 即可。如果Type(x)为 Object 且Type(y)为 String Number ,       返回比较结果ToPrimitive(x)== y。

     

<强> 10 即可。返回 false