1、JavaScript的隐式转换规则?
首先,我们先思考一下,js数据类型都有哪些?
String,Number,Object,Boolean,undefined,null.symbol
1:转换String类型:
- '+'加号,String类型使用时会变成连接符,且任何类型与String"+"连接,返回类型均是String类型; 2:转换Number类型:
- "++/--"是自增自减运算符
- '+ - * / %' 均是算数运算符
- '< > <= >= == != === !===' 关系运算符
3:转换Boolean类型
- ! 逻辑非运算符
2、双等号左右两边的转换规则?
首先需要说明的是,双等符号"==",只判断值是否相等,并不判断类型
- 特殊类型null和undefined null == undefined; //true 两者均为空值所以相等
- 如果其中一个需要操作的类型是boolean值,那么会通过隐式转换,将false转换为0,true转换为1
- 如果一个类型为string,一个类型是number,则先通过隐式转换将string类型转换为number类型,在进行比较
- 如果一个操作类型是object,另一个不是,则隐式转换通过调用toString()将类型转换为字符串,在进行比较
3、undefined >= undefined 为什么是 false ?
undefined在进行比较的时候,首先会通过Number()进行隐式的类型转换;
console.log(Number(undefined)); //NaN
NaN >= NaN //false
NaN js机制中,是非数值,也不是一个个体,而是一个范围,一个集合,就例如A不是数字,B也不是数字,但是A不一定是B 是一样的道理,所以 NaN >= NaN为false
4、null >= null 为什么是 true?
根据隐式转换规则,通过Number()方法做隐式转换,转换结果为0,0 = 0 ,所以结果为true
console.log(Number(null));
5、[] == ![] 为什么是 true ?
个人理解 根据隐式转换规则,Number()方法转换[],返回结果为0, 0 = 0 ,所以为true;
console.log(Number([])); // 返回结果为0
作者:Sunshine_Lin\
按照双等号左右两边的转换规则
-
1、
!优先级高于==,[]不是假值,所以先转换成[] == false -
2、右边为布尔值,
false先转数字0,所以可转换为[] == 0 -
3、左边为对象,
[]调用toString转为'',转换为'' == 0 -
4、左边为字符串,
''转换为0,最终为0 == 0
作者:Sunshine_Lin
链接:juejin.cn/post/702094…