我刚刚在进行一些测试,发现了这个奇怪的问题:
[] == false
返回true,这是有道理的,因为双等号仅比较内容而不比较类型并尝试进行类型强制转换。但如果它比较内容并返回true,那就意味着[]是假值(如果你执行[] == true
也会得到false),这意味着:
[] || false
应该返回 false,但它返回 [ ],这是为什么呢?这是因为 [] 被认为是一个 truthy 值,即使它是一个空数组。
另一个例子:
"\n " == 0
给出 true,但
"\n " || false
返回 "\n "
?这是为什么呢,还是只是一种怪异现象?当我在 C 中尝试时,我们得到的是:
int x = "\n " == 0;
printf("%d\n", x);
int y = "\n " || 0;
printf("%d\n", y);
输出:
0
1
这是有道理的,但考虑到C对Javascript的影响,行为会有所不同。
[]
是一个 真值 表达式,但==
执行 强制转换。这些规则在 11.9.3 抽象相等比较算法 中有所涵盖(搜索 "Equality Comparison Algorithm" 可能会找到相关问题)。 - user2864740