
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 上面是谷歌浏览器控制台.
谁能说下为什么?
1 IsaacYoung 2019-01-24 09:21:35 +08:00 via iPhone true 变成 number 是 1 false 是 0 |
2 y33772516 2019-01-24 09:21:48 +08:00 建议你回去看一下 js 入门…… |
3 zn 2019-01-24 09:21:53 +08:00 月经贴了。 js 的类型转换臭名昭著。 |
4 hjdtl 2019-01-24 09:23:20 +08:00 单单上面几行代码完全没问题,多看看红宝书的基础部分 |
5 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 |
6 ayase252 2019-01-24 09:29:06 +08:00 via iPhone 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 |
7 xuziang111 2019-01-24 09:45:01 +08:00 永远不要用==就行了,哪来这么多问题 |
8 jera 2019-01-24 09:47:45 +08:00 |
9 VDimos 2019-01-24 09:50:23 +08:00 via Android 隐式类型转换,js 的" feature"之一 |
10 wu67 2019-01-24 09:50:41 +08:00 如果不想管, 一股脑===. 如果你看懂了类型转换, 那可以在适当的地方用上==, 可以稍微灵活一点变换使用 |
11 grewer 2019-01-24 09:50:56 +08:00 用 === |
13 v2lf 2019-01-24 10:01:04 +08:00 |
14 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' 都 **不是假值** !!!!!! |
15 hungryhenry 2019-01-24 10:05:52 +08:00 ==会有隐式转换 |
16 Sapp 2019-01-24 10:06:02 +08:00 js 不要用 == 就屁事没有,就烦一些人以为自己会用了 ==,结果用出了 bug |
17 AV1 2019-01-24 10:24:35 +08:00 via Android 看到代码里写==和!=的,先打死再说 |
18 yyfearth 2019-01-24 10:26:37 +08:00 @Sapp 我觉得唯一可以用 == 的地方 就是 == null 了 就是 null / undefined 因为很多时候我们不 care 到底是 值是 null 还是 undefined 还是 压根不存在 |
19 whileFalse 2019-01-24 10:55:55 +08:00 看到上面说用==就打死的,我倒是觉得没事把数字跟 bool 放一起比的应该打死。 |
20 zhigang1992 2019-01-24 14:42:27 +08:00 |
21 TomVista OP @zhigang1992 php 是世界上最好的计算机语言 |
22 kwrush 2019-01-25 23:51:15 +08:00 全用===解决大部分问题 |
23 libook 2019-01-30 10:55:27 +08:00 看是否存在用 Array.prototype.includes,Array.prototype.indexOf 适用于真的想知道找到的东西的 index 的时候用。 相应的,想找一下数组中有没有一个值,如果有就取出来,用 Array.prototype.find 在 MDN 上刷一刷 Array 都有哪些方法,会发现 JS 好贴心,好多功能都有现成的了。。。 |