js 0 1 负数和 Boolean 值的转换

2019-01-24 09:18:32 +08:00
 TomVista
console.log(0==true)
VM70:1 false
undefined
console.log(-1=true)
VM121:1 Uncaught ReferenceError: Invalid left-hand side in assignment
console.log(-1==true)
VM135:1 false
undefined
if(-1){console.log('1')}
VM172:1 1
undefined
console.log(1==true)
VM225:1 true
undefined
console.log(-1==false)
VM284:1 false
undefined

上面是谷歌浏览器控制台.

谁能说下为什么?

5973 次点击
所在节点    JavaScript
23 条回复
IsaacYoung
2019-01-24 09:21:35 +08:00
true 变成 number 是 1
false 是 0
y33772516
2019-01-24 09:21:48 +08:00
建议你回去看一下 js 入门……
zn
2019-01-24 09:21:53 +08:00
月经贴了。
js 的类型转换臭名昭著。
hjdtl
2019-01-24 09:23:20 +08:00
单单上面几行代码完全没问题,多看看红宝书的基础部分
tionsin
2019-01-24 09:25:27 +08:00
1. true == 1 -- true
2. false == 0 -- true
3. true === 1 -- false
4. false === 0 -- false
ayase252
2019-01-24 09:29:06 +08:00
0 == true 相当于 0 == toNumber(true)
toNumber(true) = 1

-1 == false 相当于 -1 == toNumber(false)
toNumber(false) = +0

if(-1) 相当于 if(toBoolean(-1))
而 toBoolean 对于参数是 number 的规则是只在参数为-0 +0 NaN 时返回 false,其他情况返回 true
xuziang111
2019-01-24 09:45:01 +08:00
永远不要用==就行了,哪来这么多问题
jera
2019-01-24 09:47:45 +08:00
VDimos
2019-01-24 09:50:23 +08:00
隐式类型转换,js 的" feature"之一
wu67
2019-01-24 09:50:41 +08:00
如果不想管, 一股脑===. 如果你看懂了类型转换, 那可以在适当的地方用上==, 可以稍微灵活一点变换使用
grewer
2019-01-24 09:50:56 +08:00
用 ===
TomVista
2019-01-24 09:58:24 +08:00
@jera 感谢
v2lf
2019-01-24 10:01:04 +08:00
FakeLeung
2019-01-24 10:02:51 +08:00
console.log(0==true)
console.log(-1==true)
这里因为隐式转换
true == toNumber(true) == 1
false == toNumber(false) == 0
所以
0 == 1 返回 false
-1 == 1 返回 false
1 == 1 返回 true
-1 == 0 返回 false

== 会有隐式转换的,如果 x y 有一个是数字,则另一个也会转会数字再比较。

if(-1){console.log('1')}
这里就不是用 -1 == true 来做判断的。
在 js 的 if 里面,只要括号中的表达式是 **真值** 就可以了。
什么是真值?太多了。
你只需要知道,什么是假值:false, Boolean(0), null, undefined, 0 (这是数字 0,不是字符串 '0')

注意,其他的像 [], {}, '0', 'false' 都 **不是假值** !!!!!!
hungryhenry
2019-01-24 10:05:52 +08:00
==会有隐式转换
Sapp
2019-01-24 10:06:02 +08:00
js 不要用 == 就屁事没有,就烦一些人以为自己会用了 ==,结果用出了 bug
DOLLOR
2019-01-24 10:24:35 +08:00
看到代码里写==和!=的,先打死再说
yyfearth
2019-01-24 10:26:37 +08:00
@Sapp 我觉得唯一可以用 == 的地方 就是 == null 了
就是 null / undefined 因为很多时候我们不 care 到底是 值是 null 还是 undefined 还是 压根不存在
whileFalse
2019-01-24 10:55:55 +08:00
看到上面说用==就打死的,我倒是觉得没事把数字跟 bool 放一起比的应该打死。
zhigang1992
2019-01-24 14:42:27 +08:00

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

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

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

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

© 2021 V2EX