提问人:Pouria Moosavi 提问时间:10/22/2019 更新时间:10/22/2019 访问量:56
为什么检查三个字符串之间的相等性不起作用,但三个数字之间的相等性有效?
why checking equality between three strings not works but between three numbers does?
问:
我已经在 javascript 中检查了三个数字之间的相等性,它有效。喜欢:
1 == 1 == 1 //true
2 == 3 == 4 //false
2 == 3 == 3 //false
但是当我尝试在三个字符串之间进行此检查时,它不起作用:
'some string' == 'some string' == 'some string' //false
'a' == 'a' == 'a' //false
有谁知道为什么会这样?
提前致谢。
答:
4赞
CertainPerformance
10/22/2019
#1
因为
'some string' == 'some string' == 'some string'
按从左到右的顺序评估运算符。它相当于==
('some string' == 'some string') == 'some string'
这是
true == 'some string'
这是错误的,因为当布尔值与其他东西进行比较时,根据规范:
- 如果 Type(x) 为 Boolean,则返回比较结果!ToNumber(x) == y。
当右侧是字符串时,这将解析为
1 == 'some string'
然后运行
- 如果 Type(x) 为 Number 且 Type(y) 为 String,则返回比较结果 x == !ToNumber(y) 中。
但是是ToNumber('some string')
NaN
console.log(Number('some string'));
因此,比较的计算结果为 。false
另一方面,使用 ,遵循相同的过程:1 == 1 == 1
1 == 1 == 1
(1 == 1) == 1
true == 1
// Rule 8, turn left side into a number:
1 == 1
true
结论:始终使用 .如果使用 ,则会遇到奇怪的行为。===
==
1赞
Amit
10/22/2019
#2
1 == 1 == 1 可以解释为 (1 == 1 (true) == 1),这是真的。 但是 'a' == 'a' == 'a' 将被解释为 ('a' == 'a' (true) == 'a'),这将是假的。as true 不等于 'a'。
上一个:如何比较数组的指定类型元素?
下一个:比较 R 中相等的 2 个数据帧
评论
1 == 1 == 1
->1 == true
->1 == 1
->true
true
false
==