我正在努力学习更多有关这种自由主义语言的知识,而且很好的解释会很棒。
谢谢!
答案 0 :(得分:3)
来自规范
The Abstract Equality Comparison Algorithm
比较x == y,其中x和y是值,产生true或 假。这样的比较如下进行:
如果Type(x)与Type(y)相同,那么
一个。如果Type(x)是Undefined,则返回true。
湾如果Type(x)为Null,则返回true。
℃。如果Type(x)是Number,那么
i. If x is NaN, return false. ii. If y is NaN, return false. iii. If x is the same Number value as y, return true. iv. If x is +0 and y is −0, return true. v. If x is −0 and y is +0, return true. vi. Return false.
d。如果Type(x)是String,则如果x和y完全相同的字符序列(相同的长度和相同的字符),则返回true 相应的职位)。否则,返回false。
即如果Type(x)是布尔值,如果x和y都为true或两者都为false,则返回true。否则,返回false。
F。如果x和y引用同一个对象,则返回true。否则,返回false。
如果x为null且y未定义,则返回true。
如果x未定义且y为null,则返回true。
如果Type(x)为Number且Type(y)为String,则返回比较结果x == ToNumber(y)。
如果Type(x)为String且Type(y)为Number,则返回比较结果ToNumber(x)== y。
如果Type(x)是布尔值,则返回比较结果ToNumber(x)== y。
如果Type(y)是布尔值,则返回比较结果x == ToNumber(y)。
如果Type(x)是String或Number而Type(y)是Object,则返回比较结果x == ToPrimitive(y)。
如果Type(x)是Object而Type(y)是String或Number,则返回比较结果ToPrimitive(x)== y。
- 醇>
返回false。
答案 1 :(得分:2)
这是因为JavaScript只比较语句"1" == 1
中的值。双等号告诉JavaScript,即使类型不同,也允许它强制并比较纯值。
这就是为什么经常建议使用三等号,以避免这种类型的强制。三等于符号纯粹比较价值。
答案 2 :(得分:1)
由于丢失类型检查
Equal(==)如果两个操作数的类型不同,则为JavaScript 转换操作数,然后应用严格的比较。如果是 操作数是一个数字或布尔值,操作数转换为 数字如果可能;否则,如果任一操作数是字符串,则为字符串 如果可能,操作数将转换为数字。如果两个操作数都是 对象,然后JavaScript比较相同的内部引用 当操作数引用内存中的同一个对象时。
因此,请始终使用===
运算符或使用strict mode
答案 3 :(得分:1)
隐式检查
"1" == 1 //true
1 == 1 //true
明确检查
1 === 1 //true
"1" === 1 //false
答案 4 :(得分:1)
如果使用==符号,javascript将不会检查类型。它进行自动类型转换。
如果您使用=== javascript将检查类型。并且这将为您的示例返回false。