Chi*_*iru 4 javascript arrays string compare object
在JavaScript中,为什么:
"" < {}评估true和
"" < []评价到false?
因为<强迫其论点.它更喜欢比较数字,但如果对象不支持数字原始值,它会执行字符串,最后会进行词法比较.String({})是"[object Object]",但是String([])是""."" < "[object Object]"是true,但是"" < ""是false.
所有血淋淋的细节都在规范中(公平警告,语言很温和).
来自你的评论:
如果第一次尝试的数字,认为
Number({})是NaN和Number([])是0.比较NaN < 0评估结果false,等等0 < NaN.为什么忽略这些结果?
当我最初说"......它首先尝试数字......"时(我已经更新了),我最初说得很糟糕.它没有.它只是喜欢数字.再次,详细说明中的详细信息(来自上面的各种链接),但基本上:
<操作ToPrimitive对其操作数执行abtract 操作.[[DefaultValue]]使用"提示""数字" 调用内部方法.[[DefaultValue]](hint = Number)调用valueOf对象的方法,如果该方法返回一个原语,则返回它; 如果结果不是原始[[DefaultValue]]结果,则返回结果toString.的valueOf对象(包括数组)的方法返回原始对象不变,因此结果被[[DefaultValue]]返回的结果toString.<操作看到的是,操作数都是字符串,并将其词法进行比较.然而,如果操作数是原始数字,则ToPrimitive返回数字不变,并且<将在数学上对它们进行比较; 如果它们是Number实例(记住JavaScript有数字,字符串和布尔值的原始和对象版本),Number#valueOf将被调用[[DefaultValue]],并Number#valueOf返回原始数值.因此<,他们将以数学方式对它们进
好玩,嗯?