为什么'0'不等于一个空列表?
Why is '0' not equal to an empty list?
如果0(作为数字)等于0作为字符串,0等于空列表,为什么0作为字符串不等于空列表(从数字 0 等于字符串 0 的那一刻起)?
> 0 == '0'
true
> 0 == []
true
> '0' == []
false
要了解代码的结果,您需要了解 ==
相等运算符在以下情况下的工作原理:
- 当两个操作数类型相同时,return严格相等比较的结果
===
- 如果一个操作数是数字,另一个是字符串,则将字符串操作数转换为数字
- 如果任何一个或两个操作数都是non-primitive,将non-primitive操作数转换为原始值
牢记以上几点,让我们看看每个比较是如何处理的:
0 == '0'
这计算结果为真,因为 '0'
被转换为数字,然后执行严格相等比较,因为两个操作数在 '0'
转换为数字后具有相同的类型。
0 == []
return 为真,因为当 ==
运算符的任何操作数为 non-primitive 时,它被转换为原始值。转换为原始值时的空数组会生成空字符串。所以在这个转换之后,你有 0 == ''
。现在一个操作数是数字,另一个是字符串。然后将空字符串转换为数字,结果 0
导致 0 == 0
的比较结果为真。
'0' == []
这个 returns false 因为空数组被转换为原始值,即空字符串。当[]
转换为空字符串时,两个操作数('0' == ''
)的类型相同,因此进行严格相等比较,return为false。
在JavaScript中,双等号不是严格等于,而三等号===
是。在前一种情况下,根据所涉及的类型进行转换,而在后一种情况下不存在此类可用转换(导致 semi-equality)。
JavaScript 就是这样设计的。
在 0 == '0'
==
将 '0' 转换为 0 因为右操作数是一个数字
那么会发生什么是它检查 0 == 0 这是真的。
提示使用===
调用strick相等比较来检查,它将0
当作一个数字,'0'
当作一个字符串。
0 == []
在 Javascript 中,空数组被视为虚假,而 0 始终为假,1 始终为真。
所以==比较false == false
是真的。再次使用严格的公平符号 ===
'0' == []
这里因为 [] 不是数字 Javascript 不会关心将 '0' 转换为 0 这意味着比较是比较字符串和数组,这不会是真的。
。您有 3 个案例。
当你写 '0' == 0 时,utf-8 中 '0' 的值是 0 因此
false ==false 为真
String 基本上是 python 中的一个列表,当你写 '0' 时,你基本上是在用一个元素 '
'0' 即 '0' ==['0'] 而不是 [ ] 因此 true==false 是 false
而当您编写 0==[ ] 时,每个值为 0 的值都是 false,而空列表 returns 列表中元素数的布尔值对于 0 为 False 因此false ==false 为真
如果0(作为数字)等于0作为字符串,0等于空列表,为什么0作为字符串不等于空列表(从数字 0 等于字符串 0 的那一刻起)?
> 0 == '0'
true
> 0 == []
true
> '0' == []
false
要了解代码的结果,您需要了解 ==
相等运算符在以下情况下的工作原理:
- 当两个操作数类型相同时,return严格相等比较的结果
===
- 如果一个操作数是数字,另一个是字符串,则将字符串操作数转换为数字
- 如果任何一个或两个操作数都是non-primitive,将non-primitive操作数转换为原始值
牢记以上几点,让我们看看每个比较是如何处理的:
0 == '0'
这计算结果为真,因为
'0'
被转换为数字,然后执行严格相等比较,因为两个操作数在'0'
转换为数字后具有相同的类型。0 == []
return 为真,因为当
==
运算符的任何操作数为 non-primitive 时,它被转换为原始值。转换为原始值时的空数组会生成空字符串。所以在这个转换之后,你有0 == ''
。现在一个操作数是数字,另一个是字符串。然后将空字符串转换为数字,结果0
导致0 == 0
的比较结果为真。'0' == []
这个 returns false 因为空数组被转换为原始值,即空字符串。当
[]
转换为空字符串时,两个操作数('0' == ''
)的类型相同,因此进行严格相等比较,return为false。
在JavaScript中,双等号不是严格等于,而三等号===
是。在前一种情况下,根据所涉及的类型进行转换,而在后一种情况下不存在此类可用转换(导致 semi-equality)。
JavaScript 就是这样设计的。
在 0 == '0'
==
将 '0' 转换为 0 因为右操作数是一个数字
那么会发生什么是它检查 0 == 0 这是真的。
提示使用===
调用strick相等比较来检查,它将0
当作一个数字,'0'
当作一个字符串。
0 == []
在 Javascript 中,空数组被视为虚假,而 0 始终为假,1 始终为真。
所以==比较false == false
是真的。再次使用严格的公平符号 ===
'0' == []
这里因为 [] 不是数字 Javascript 不会关心将 '0' 转换为 0 这意味着比较是比较字符串和数组,这不会是真的。
。您有 3 个案例。
当你写 '0' == 0 时,utf-8 中 '0' 的值是 0 因此
false ==false 为真String 基本上是 python 中的一个列表,当你写 '0' 时,你基本上是在用一个元素 ' '0' 即 '0' ==['0'] 而不是 [ ] 因此 true==false 是 false
而当您编写 0==[ ] 时,每个值为 0 的值都是 false,而空列表 returns 列表中元素数的布尔值对于 0 为 False 因此false ==false 为真