您的位置:首页 > 编程语言 > Java开发

[] == ![]涉及的运算符及类型转换

2015-09-28 10:25 477 查看
[] == ![];
// true

一个简单的运算,一共涉及了:运算符优先级,boolean类型的转换,相等运算符的比较逻辑,数值的转换逻辑所以还是蛮经典的

圆括号()
成员访问.
后置递增|后置递减++|--
逻辑非,一元加,一元减,前置递增,前置递减
乘法,除法,取模
加法,减法
大于,大于等于,小于,小于等于
等号,非等号,全等
逻辑与... && ...
逻辑或... || ...
条件运算法... ? ... : ...
赋值=

首先,是根据运算符优先级来确定运算顺序。根据上面列出的常用运算符的优先级,可得出会先运算等号左边的。

只有null, undefined,""(空字符串),0和NaN转化为false(这些类型叫假值)。所以[]转化为true
!逻辑非操作符首先会将它的操作数转换为一个布尔值,然后再对其取反
!!两个逻辑非,作用域Boolean()转型函数行为相同
&&如果左侧为真值,则返回右侧值.如果左侧为假值,则返回左侧的值
||如果左侧为真值,则返回左侧值.否则返回右侧值

逻辑非会先把变量转化为boolean值,再对他做非运算。所以这里考查,boolean类型的转换,根据上面所以最终会把![]转化为false

如果两个操作数类型相同,用严格比较,
如果一个是null,另一个是undefined。则相等
如果一个是数字,另一个是字符串。则把字符串转化为数字,然后比较
如果一个是boolean值。则先将其转为数字。true为1,false为0
如果一个是Object,另一个是数字或字符串。则让把Object转化为原始值,再比较。JS先尝试用valueOf()转化。再尝试用toString()转化。再比较([].toString为''(空字符串),空字符再变为0。所以[]==''==0;
![] == !true == false == 0(有boolean值先转为数字))

所以会先把false转换为数字类型的0。然后再把[]使用toStrin
c0d9
g()把[]转为''

Booean值,true为1,false为0
null,返回0
undefined,返回NaN
对象,先调用ValueOf(),如果是NaN,再调用toString()

字符串

只包含数字(浮点字符)(包括以正负号开头),则转化为10进制数值(浮点数值)。数字后有其他字符都不行!
只包含有效的十六进制格式,被转化为16进制
空字符串,返回0
其他,都返回NaN

最终会把[]转化为0,所以0 == 0

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JavaScritp