JS 真是门神奇的语言

2017-12-14 10:42:51 +08:00
 jason19659
[] == ![]
true

这样都行的吗
7233 次点击
所在节点    程序员
42 条回复
vincenttone
2017-12-14 10:50:10 +08:00
[] == false
Smilecc
2017-12-14 10:51:31 +08:00
[] === ![]
mentalidade
2017-12-14 10:51:39 +08:00
难道比较的是两个数组的地址?
vincenttone
2017-12-14 10:51:44 +08:00
[] == false
![] == false
!false == true

应该是弱类型导致的?
mooncakejs
2017-12-14 10:52:51 +08:00
准备战争:来 show 出你常用的语言,我们来找奇葩点。
nannanziyu
2017-12-14 10:56:04 +08:00
@mooncakejs
额,汉语?
vincenttone
2017-12-14 10:56:14 +08:00
![] === false
[] == false

[] === false // false

应该是弱类型导致的吧
ZxBing0066
2017-12-14 10:58:41 +08:00
...并不觉得有什么槽点 毕竟现实谁也不会写这种代码
mooncakejs
2017-12-14 11:00:26 +08:00
@nannanziyu 我只负责引战,不负责战斗。
littlepanzh
2017-12-14 12:03:17 +08:00
如果知道什么是 primitive value 就不会觉得奇葩了
大多数觉得奇葩的事情其实都是了解的不够导致的~
Pastsong
2017-12-14 12:15:05 +08:00
这是 ECMA262 标准的实现
zywsss
2017-12-14 12:19:20 +08:00
左侧的[]是一个对象,js 中对象都是为 true
右侧的![],其中的!会将右侧的[]转为 boolean 并取反,js 中数组只有 toString 方法进行类型转换,[]就转为了空字符串''为 false,一取反为 true
599316527
2017-12-14 12:28:23 +08:00
https://pbs.twimg.com/media/DM1czpAXkAAH8qF.jpg

看过哈哈哈就好了,真的干活谁要敢这么写就是找死
lovedebug
2017-12-14 12:38:38 +08:00
1. [] == false
2. "" == 0
3. 0 == 0
leemove
2017-12-14 12:42:10 +08:00
所以我们用===
bramblex
2017-12-14 12:44:03 +08:00
typescript 大法好
SourceMan
2017-12-14 12:47:33 +08:00
没毛病啊,这是语言特性,不能用强类型语言的逻辑来审视 JS 这种弱类型语言
== 是不推荐使用的比较方式,ESLint 要强制 ===
当然,可以用 TS 写,更加 666
isbase
2017-12-14 13:00:47 +08:00
Boolean([].valueOf().toString()) == ![]
airingursb
2017-12-14 13:03:53 +08:00
k9982874
2017-12-14 13:08:51 +08:00
[] 因数组长度为 0 返回 false
![] "[]"是有效对象转成 boolean 值 true,再非运算,所以返回 false
false == false 结果是 true

觉得神奇还是因为熟练度不够,继续练级吧。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/414608

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX