那些反直觉的JavaScript特性,看完只想无奈感谢发明者
对白
文本内容
typeof NaN
"number"
9999999999999999
10000000000000000
0.5+0.1==0.6
true
0.1+0.2==0.3
false
Math.max()
-Infinity
Math.min()
Infinity
[]+[]
""
[]+{}
"[object Object]"
{}+[]
0
true+true+true===3
true
true-true
0
true==1
true
true===1
false
(![]+[]+![]).length
9
9+"1"
"91"
91-"1"
90
[]==0
true
整体描述
这是一张上下结构的图文混排梗图,上半部分是JavaScript代码的运行结果展示,罗列了多个违背常规编程认知的语言特性:比如typeof NaN返回number,0.1+0.2与0.3比较结果为false,空数组与0比较结果为true等,这些都是JavaScript语言设计中广为人知的反直觉点;下半部分是一张真人表情包,配文英文Thanks for inventing Javascript,用略带讽刺和无奈的语气,表达开发者面对这些迷惑特性时的哭笑不得,整体没有双关、谐音梗,核心是调侃JavaScript的语言设计特殊性。
来源说明
图中下半部分的表情包是网络上流传的经典讽刺感谢类表情包,原型为真实人物的照片;上半部分的JavaScript反直觉案例是前端开发圈的经典内容,常被用于技术社群的调侃讨论。图片右下角带有知乎用户“我曾跨过山和大海”的水印,推测这张图是该用户或其他网友将代码截图与表情包拼接而成,主要在知乎、掘金、微博等程序员社群平台流传,用来吐槽JavaScript的语言设计。