Javascript类型转换悖论
Javascript typecast paradox
本文关键字:类型转换 Javascript 更新时间:2023-09-26
有人可以解释一下,为什么!
和==
弄乱了布尔[]
的类型转换:
![] // false
!0 // true
[] == 0 // true
!0 == ![] // false
同样的悖论:
0 == Boolean ([]) // false
[] == false // true
Boolean([]) // true
[] == Boolean([]) // false
1) ![]
任何对象实例(包括[]
)都是真值。 ![]
-> !true
-> false
2) !0
0
是虚假值。 !0
-> !false
-> true
3) [] == 0
将对象与基元值(在本例中为另一个数字)进行比较时,该对象也会转换为基元。 [] == 0
-> 0 == 0
-> true
4) !0 == ![]
!0 == ![]
-> !false == ![]
-> true == ![]
-> true == !true
-> true == false
-> false
5) 0 == Boolean ([])
如前所述,一个对象在转换为布尔值时总是为真,0
是假的。 0 == Boolean ([])
-> 0 == true
-> 0 == 1
-> false
6) [] == false
[] == false
-> [] == 0
-> 0 == 0
-> true
7) Boolean([])
对象引用始终为真。 Boolean([])
-> true
8) [] == Boolean([])
[] == Boolean([])
-> [] == true
-> [] == 1
-> 0 == 1
-> false
查看这篇关于比较和类型转换的有趣文章。
相关文章:
- 弱类型语言类型转换的意思在哪里,为什么使用.例如JavaScript
- JavaScript 中的显式类型转换和类型
- Javascript类型转换悖论
- 将嵌套的 c# 类型转换为 json,并在 javascript 中使用它
- Dojo Dnd 问题:使用 JavaScript 通过 Dnd 项类型转换为 JSON
- 奇怪的JavaScript类型转换
- JavaScript 的 (0 == “”) === true 如何与 ECMA-262 类型转换规则一致
- JavaScript 括号将基元类型转换为对象
- Javascript/google闭包库中的类型转换
- 是否可以像在Javascript对象中那样将整数值存储在localStorage中,并在不进行类型转换的情况下提取它
- 将JSON转换为X类型的JavaScript对象
- javascript中带有无符号32位整数的位移位/类型转换
- Javascript中的类型转换
- Javascript类型转换
- JavaScript智能感知类型转换
- JavaScript 类型转换:(true && 1) vs (true | | 1).例如,
- Java到JavaScript类型转换算法
- 在Javascript中添加和减去字符串和数字-自动类型转换
- 类型转换- Javascript -转换字节到字节
- 类型转换-JavaScript-为什么使用+!{}[0]==1