JS 真是门神奇的语言

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

这样都行的吗
7248 次点击
所在节点    程序员
42 条回复
wxsm
2017-12-14 13:14:41 +08:00
你觉得这个结果很“神奇”,只是因为你对它的了解还不够而已。
yasumoto
2017-12-14 13:25:51 +08:00
[] !== [] 也是等于 true
finian
2017-12-14 13:31:38 +08:00
@zywsss @k9982874 别瞎猜,看看人家 Spec 是怎么定义的:

> http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3

```
[] == ![]
=> [] == false // ![]
=> [] == 0 // [] == ToNumber(false)
=> '' == 0 // ToPrimitive([]) == 0
=> 0 == 0 // ToNumber('') == 0
=> true
```
v2lf
2017-12-14 13:34:09 +08:00
是时候拿出来我珍藏的网页啦, 虽然规范最好,但是有人不喜欢看,所以 ,
看下这个。

[see me]( https://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/)
uolcano
2017-12-14 13:34:14 +08:00
一个建议,有时间多看看 ECMAScript 标准文档吧
DOLLOR
2017-12-14 13:50:37 +08:00
可以参考: https://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/
很复杂,是嘛?为何不直接用===和!==呢?
对 JS 不求甚解,却热衷奇技淫巧,就像某些 C 语言初学者争吵 i+++++i 的结果一样毫无意义。
noviceiOS
2017-12-14 14:17:05 +08:00
@zywsss 那为什么

[] == ![] true

{} == !{} false
Tompes
2017-12-14 14:25:13 +08:00
是时候掏出 JS 真值表了。 [滑稽
zywsss
2017-12-14 15:18:26 +08:00
@finian 他这个应该是对的

[] == ![]

!优先级比==高,所以先执行![],将[]转为 bool 并取反,[]空数组也是对象,对象为 true,取反结果为 false
[] == false 左侧是对象,右侧是 bool,类型不一样,转为数字进行比较
[] == 0
左侧空数组要转为数字,数组转为 primitive 只有 toString,结果就是空字符''
'' == 0 左右类型还是不一样,转为数字比较

0 == 0 结果 true
jason19659
2017-12-14 16:01:59 +08:00
@finian #26 不对啊,那为什么
```
[] == []
false
[] != []
true
```
LeungJZ
2017-12-14 16:12:12 +08:00
if ([]) console.log('a')
else console.log('b')

输出 a 你会怀疑人生了。
ivechan
2017-12-14 16:13:30 +08:00
“ The World's Most Misunderstood Programming Language ”
这篇文章也不是现在才有的了, 但是这不影响 JavaScript 是个成功的语言, 是值得学习的。
值不值得你爱,就因人而异了。
jason19659
2017-12-14 16:19:32 +08:00
@ivechan #34 不管你爱不爱。。但你都得用。。
janxin
2017-12-14 16:28:04 +08:00
不会背真值表你怎么用 JS ?
zywsss
2017-12-14 16:42:53 +08:00
@jason19659 []数组是对象,左右两边是两个独立的对象
Terry05
2017-12-14 16:57:33 +08:00
写 js 要习惯于使用 === 不然会有很多自己意想不到的坑!
begoingtodo
2017-12-14 17:04:41 +08:00
timothyqiu
2017-12-14 17:20:37 +08:00
bucky
2017-12-14 21:48:04 +08:00
一个语言的设计缺陷常常被用来当面试题,真不明白这些人怎么想的
SimbaPeng
2017-12-15 00:43:31 +08:00
@bucky 不仅要当面试题,还要被脑残粉美其名曰:feature, 2333333

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

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

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

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

© 2021 V2EX