发布于 2026-01-06 0 阅读
0

为 JavaScript 的怪异之处辩护

为 JavaScript 的怪异之处辩护

各位同仁!各位法庭成员!
我的委托人屡屡遭受不公正的嘲笑和公众讥讽。太多次,开发者,尤其是其他语言的开发者,都拿他开涮嘲笑他。他们坚持认为他古怪离奇、书呆子气十足

针对我客户的这些攻击,大多数理由都基于一些所谓的怪异之处,例如:

[] == ![]    // -> true
Enter fullscreen mode Exit fullscreen mode

或者

NaN === NaN             // -> false
Math.max()>Math.min()   // -> false
Enter fullscreen mode Exit fullscreen mode

甚至

[] == ''   // -> true
[] == 0    // -> true
[''] == '' // -> true
[0] == 0   // -> true
[0] == ''  // -> false
[''] == 0  // -> true
Enter fullscreen mode Exit fullscreen mode

我们在讨论什么?有什么奇怪之处?

奇怪的是,如果你将此请求提交给我的客户。

{} + []
Enter fullscreen mode Exit fullscreen mode

他回答说:0“?这有什么奇怪的?”
或许奇怪之处不在于答案,而在于问题本身。如果你问我的客户这样一个愚蠢的问题,你又怎能指望得到一个合情合理的答案呢?
我的客户回答说0:“?”,但他其实也可以回答“ 42?”。我不明白为什么换个答案就比这个答案更合理。
或许他应该像其他语言在这种情况下那样,提出异议,生气,甚至可能侮辱对方?
不,先生们。我的客户很有幽默感,也无意冒犯任何人。
他意识到这个要求的荒谬之处,并以同样语气的回答回应。

各位法官大人,最经典的反对意见是,我的当事人不仅古怪,而且前后矛盾,因为他对以下请求……

[] + {}
Enter fullscreen mode Exit fullscreen mode

他没有再次回复0,而是回复了[object Object]

即使在这里,奇怪之处在哪里?谁说过+数组和对象之间的运算满足交换律?结果"foo" + "bar"不同并不奇怪"bar" + "foo"。但如果我的客户在改变操作数顺序后给出不同的答案,那他才奇怪。

针对我客户的另一个反对意见是,它并非真正的面向对象编程语言,因为它没有类,或者更确切地说,它所谓的类并非真正的类
首先:谁规定面向对象编程语言必须有类?其次:好吧,我的客户在支持关键字和关键字方面
确实有些含糊其辞。但他这样做是出于好意,是为了让自己与其他冷落他的语言一样,感到公平。newclass

我无法否认我的客户与其他语言略有不同,但这种不同还不至于招致嘲笑和侮辱

事实上,那些指责我的客户古怪的人并不了解他,也不愿尝试去了解和理解他。
他们习惯了生硬的语言,缺乏一丝幽默感(我甚至可以说,他们没有灵魂),以至于把玩笑误解为古怪和矛盾。
但如果这些人能尝试更好地了解他,与我的客户建立亲密的关系,他们就会发现凡事皆有因,问题或许不在于我的客户的回答,而在于开发人员提出的问题。

这篇文章最初发表在我的 Medium 个人主页上。

文章来源:https://dev.to/andychiare/-in-defense-of-javascript-oddities-4eeb