请选择 进入手机版 | 继续访问电脑版

 找回密码
 立即注册
查看: 117|回复: 5

[已解决] 条件判断问题

[复制链接]

2

主题

6

帖子

7

积分
交易币
0

新手入门

Rank: 1

发表于 2022-1-7 11:37:58 | 显示全部楼层 |阅读模式
本帖最后由 yours 于 2022-1-8 22:03 编辑

console.log(""==0) //true
console.log(""=="")//true
console.log(!!0)//false
console.log(!!"")//true


这是什么情况,那个大神来解释一下
回复

使用道具 举报

0

主题

17

帖子

66

积分
交易币
0

编程一段

Rank: 2

发表于 2022-1-7 12:17:54 来自手机 | 显示全部楼层
就是类型转换没啥好说的
回复 支持 反对

使用道具 举报

0

主题

11

帖子

7

积分
交易币
0

新手入门

Rank: 1

发表于 2022-1-7 13:41:35 | 显示全部楼层
JavaScript 倒是更适合写这种杠精的代码:
'' == '0'  //false
0 =='' //true
0 == '0' //true
false == 'false' //false
false == undefined //false
false == null //false
undefined == null  //true
' \t\r\n ' == 0 //true
{} + []  == 0 //true
[] + 0 == '0' //true
{} + 0 == 0 //true
({} + []) == "[object Object]" //true


回复 支持 反对

使用道具 举报

2

主题

6

帖子

7

积分
交易币
0

新手入门

Rank: 1

 楼主| 发表于 2022-1-8 12:10:17 | 显示全部楼层
我想知道
console.log(!!"")//true 空字符串单独判断时被转换成什么?使其成为true,为什么?
console.log(""==0) //true 空字符串和数字比较时怎么又被转换成false?为什么?
这和js不一样
回复 支持 反对

使用道具 举报

0

主题

17

帖子

66

积分
交易币
0

编程一段

Rank: 2

发表于 2022-1-8 12:47:45 来自手机 | 显示全部楼层
show me  the money!
回复 支持 反对

使用道具 举报

0

主题

2

帖子

1

积分
交易币
0

新手入门

Rank: 1

发表于 2022-1-8 13:35:33 | 显示全部楼层
有名堂 发表于 2022-1-8 12:10
我想知道 ...... 这和js不一样

其他语言要做到跟 JavaScript 完全一样不太现实。
JavaScript 被仓促设计出来就迅速流行,逻辑值的转换规则有点乱,
估计万字以下的文章不一定能解释清楚 JavaScript 类型转换机制,例如:

[JavaScript] 纯文本查看 复制代码
if(!undefined){ console.log("未定义") }
if(undefined==false){ console.log("未定义") }

这两句代码在 JavaScript 里执行结果是不同的。

[JavaScript] 纯文本查看 复制代码
if(!null){ console.log("空") }
if(null==false){ console.log("空") }

这两句代码在 JavaScript 里执行结果也是不同的。

aardio 的逻辑值转换规则其实相对简单并容易理解,记住:
非 0、非 null 转换为逻辑值为 true,反之为 false

[aardio] 纯文本查看 复制代码
if(!null){ console.log("空") }
if(null==false){ console.log("空") }

上面两句代码在 aardio 里结果也是一致的。

了解了基本语法规则,下面定义2个对象:

[aardio] 纯文本查看 复制代码
var a = {}
var b  = {1,2,3}


用逻辑操作符 !! 两次取反取逻辑值然后比较:

!!a ==!!b 结果是 true
a == b 的结果也应该是 true 吗?!
a == b 等价于 {}=={1,2,3} 显然应该返回 false。

这就好像肉包做成了包子变成了肉包子,豆沙做成了包子变成了豆沙包子,肉包子和豆沙包子都是包子,不能能据此推断出 肉 == 豆沙。

所以显然你也不能用 !!"" == !!0 来判断 ""==0 的结果。

如果字符串与数值比较,
aardio 与 JavaScript 都一样会转换为数值,数值相同则相等。
所以 aardio 与 JavaScript 里下面2个等式的结果都是 true。

""==0
"123" == 123

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



GMT+8, 2022-1-19 07:03 , Processed in 0.107107 second(s), 25 queries .

© 2001-2011 Powered by Discuz! X3.2.

快速回复 返回顶部 返回列表