fuck-the-js
null vs 0
这个是因为比较符(>, <)会进行转换成数字,Number(null) == 0
, 然而null == 0
在规范里,是不存在这种相等,所以一律返回false.
+
+
为什么,可以看到主要的问题是在+ +
这个地方。 他是相当于'x' + (+'w')
,在这里会把w
进行强制转换(Number('w')
), 所以变成了'x' + NaN
. 具体的可以参考最新版的规范-12.8.3.1Runtime Semantics: Evaluation - 12.8.5。
object vs object
看代码,可能会产生疑问。a < b
是相当于[object object] < [object object]
,我们知道两个字符串在进行比较的时候,是逐字符串字典顺序比较的,但是这个比较奇怪,不会按照字典顺序比较。 他的比较a <= b
实际是通过先比较b < a
,然后对b < a
的结果取反,我们知道b < a
是false
,所以取反的结果就是true
.
艹
摘选自jsfuck
操蛋系列
promise和async打印顺序
你觉得上面会输出什么?两个都是微任务。不能单一的说输出啥,记得环境。
以浏览器端来说,当前的chrome版本(v75.0.3770.100)的行为和node8版本的行为差不多,但是如果你切换到node10去跑,又是另外一种结果。
好吧,或许你可以看这里再了解了解吧。
看看更快的async和promise这篇文章。
Last updated