题目:`[] == ![]`
解析:
!优先级高于==先计算![]部分。[]为非falsy值,转化为true,因此![]为false。题目转换为[] == false。- 比较运算符的左右操作数类型不一致,
[]先通过toString()转化为原始值"",题目转化为"" == false。 - 比较操作符左右两边为基本类型的值,操作符右边有布尔类型的值,将布尔类型的值转换为数值,因此
false转化为0。题目转换为"" == 0 - 比较操作符两边是数值和字符串的比较,调用
Number()将字符串转化为数值。Number("") 转化为0即0 == 0,结果为true。
扩展:
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。var a = 0;
!a++ == ++a
// false 此时 a = 2
目录
- 运算符优先级
!运算符- 比较操作符
运算符优先级
- 运算符
!优先级高于==因此先计算![] - 常用运算符优先级:
- 后置递增、后置递减
a++a-- - 逻辑非
!前置递增、前置递减++a--a从右向左 - 大于、小于、大于等于 、小于等于
><>=<= - 等于、全等于
=====!== - 逻辑与
&& - 逻辑或
|| - 条件运算符
- 赋值
=
- 后置递增、后置递减
参考:
! 运算符
- falsy 值
nullNaN- 0
- 空字符串
''"" undefined
- 其他值都是 true
比较操作符
==比较操作符 ,比较前,将两个操作数转换为相同的数据类型。===严格比较,操作数类型和值都必须相等
特点:
null==undefined// true 不严格相等+0===-0// true 严格相等
nullundefined严格和自身相等NaN==NaN//false NaN 都不等 NaN
== 相等运算符
左右操作数都是基本类型的值时,转换为相同类型的值作比较。
1 == "1" //true 1 == true // true 0 == false // true "" == 0 // true ,Number("") = 0左右操作数都是复杂数据类型(对象、数组)时,他们在
栈内存中的引用地址(堆内存)相同时才相等。[] == [] // false [1,2] == [1,2] //false var arr = [1,2]; var a = arr; var b = arr; a == b //true a === b //true // 同理 对象一样 {} == {} //false var obj = {a:1}; var a = obj; var b = obj; a === b true左右操作数类型不一致,基本数据类型和复杂数据类型(对象)作比较,对象会被转化为原始值。
数字和字符串比较
字符串会转换为相应的数值 (Number())
1 == "1"; //true "1"会转化为 数值 1 "1" == 1; //true // Number实现字符串转换 "1.1.1" == 1.1 //false parseInt("1.1.1") // 1 parseFloat("1.1.1") // 1.1 Number("1.1.1") // NaN Number("1.1") // 1.1 parseInt("1.1") // 1 parseFloat("1.1") // 1.1 Number("") // 0 相当于 Number() parseInt("") // NaN 相当于parseInt() parseFloat("") // NaN 相当于parseFloat()如果其中一个操作数为布尔值,则true 转换为1 ,false转换为0
1 == true // true "1" == true // true对象与数字或字符串作比较时,操作符通过
valueOf()和toString()将对象转换为原始值(字符串、数值),转换失败会产生运行时错误。var obj = {a:1}; obj.toString() // "[object Object]" obj.valueOf() // obj obj.valueOf() === obj // true var arr = []; arr.toString() // "" arr.valueOf() // arr arr.valueOf() === arr // true [] == 0 // true [] == false // true [1] == 1 // true [1] == "1" // true
=== 全等运算符
操作数值和数据类型相等时返回true 否则返回false
1 === "1" //false
1 === 1 //true
参考:
更多精彩

