"[] == false"值为true,但"[] == ![]"值也为true??

Sodino 2016-03-31 02:06:33
"[] == false"值为true,但"[] == ![]"值也为true??

用的Chrome运行 如下图,很是不解..

...全文
165 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sodino 2016-03-31
  • 打赏
  • 举报
回复
引用 4 楼 somnus3421 的回复:
! 会把后面的转化为布尔类型 !true 就是 false 了
谢谢.. 还是自己看书不够仔细,查了下,犀牛书第49页,有讲任意数组转boolean值都为true。取反自然是false了。 感谢.
somnus3421 2016-03-31
  • 打赏
  • 举报
回复
引用 3 楼 sodino 的回复:
[quote=引用 2 楼 somnus3421 的回复:] [] == ![]很正常 因为并非是同一个对象,当然值不相等。 题主的疑问是 [] == false 所以false == true?这怎么可能!(╯‵□′)╯︵┻━┻ 其实不对 因为js中 == 和 === 的区别 ==是存在隐式转换的 ==只是比较转化后的值,而===比较的是值与数据类型 [] == false 隐式转换后 []的值等于false []空数组和false用 ==比较, 会因为比较时调用valeOf还是toString( 原谅我记不清了,可以细看下js高程) 而 ![] === false,实际上![]和false是完全等价的 所以 [] == false(也就是![])就没问题了 所以这就是为什么在javascript中,全部用===是比==好的,因为不存在隐式转换,用强类型的思想写弱类型语言是非常必要的。
嗯,不同类型对比调用的是"toString()" reference: http://stackoverflow.com/questions/5491605/empty-arrays-seem-to-equal-true-and-false-at-the-same-time 但疑惑在于:“![] === false,实际上![]和false是完全等价的” 为什么 ![] 和 false完全等价?? [/quote] ! 会把后面的转化为布尔类型 !true 就是 false 了
Sodino 2016-03-31
  • 打赏
  • 举报
回复
引用 2 楼 somnus3421 的回复:
[] == ![]很正常 因为并非是同一个对象,当然值不相等。 题主的疑问是 [] == false 所以false == true?这怎么可能!(╯‵□′)╯︵┻━┻ 其实不对 因为js中 == 和 === 的区别 ==是存在隐式转换的 ==只是比较转化后的值,而===比较的是值与数据类型 [] == false 隐式转换后 []的值等于false []空数组和false用 ==比较, 会因为比较时调用valeOf还是toString( 原谅我记不清了,可以细看下js高程) 而 ![] === false,实际上![]和false是完全等价的 所以 [] == false(也就是![])就没问题了 所以这就是为什么在javascript中,全部用===是比==好的,因为不存在隐式转换,用强类型的思想写弱类型语言是非常必要的。
嗯,不同类型对比调用的是"toString()" reference: http://stackoverflow.com/questions/5491605/empty-arrays-seem-to-equal-true-and-false-at-the-same-time 但疑惑在于:“![] === false,实际上![]和false是完全等价的” 为什么 ![] 和 false完全等价??
somnus3421 2016-03-31
  • 打赏
  • 举报
回复
[] == ![]很正常 因为并非是同一个对象,当然值不相等。 题主的疑问是 [] == false 所以false == true?这怎么可能!(╯‵□′)╯︵┻━┻ 其实不对 因为js中 == 和 === 的区别 ==是存在隐式转换的 ==只是比较转化后的值,而===比较的是值与数据类型 [] == false 隐式转换后 []的值等于false []空数组和false用 ==比较, 会因为比较时调用valeOf还是toString( 原谅我记不清了,可以细看下js高程) 而 ![] === false,实际上![]和false是完全等价的 所以 [] == false(也就是![])就没问题了 所以这就是为什么在javascript中,全部用===是比==好的,因为不存在隐式转换,用强类型的思想写弱类型语言是非常必要的。
  • 打赏
  • 举报
回复
alert(![])//==false

87,997

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧