在ECMAScript语言规范的11.9.1 等于操作符(==)中有如下说明:
注3:等于操作符并非总是具有传递性。例如,可能存在两个不同的字符串对象,它们各自代表相同的字符串值;每个字符串对象都会被等于操作符视为等于该字符串值,但这两个字符串对象彼此之间却不相等。例如:
new String("a") == "a"
和"a" == new String("a")
都是true。new String("a") == new String("a")
是false。
但在11.9.6 严格等式比较算法中:
7. 如果
x
和y
引用同一对象,则返回true。否则,返回false。
但是,在jsc中不是这样的。
new String("a")===new String("a")
这是真的。
那是一个jsc.exe错误吗?还是它们是同一个对象?为什么?
jsc
存在问题。也许它像Java一样进行了某种字符串池化操作。不过不确定您期望什么样的答案。您最好向这个工具的维护者报告。 - Felix Kling