JS基础题每日五道

100 阅读2分钟

1、JavaScript的隐式转换规则?

首先,我们先思考一下,js数据类型都有哪些?

String,Number,Object,Boolean,undefined,null.symbol

1:转换String类型:

  1. '+'加号,String类型使用时会变成连接符,且任何类型与String"+"连接,返回类型均是String类型; 2:转换Number类型:
  2. "++/--"是自增自减运算符
  3. '+ - * / %' 均是算数运算符
  4. '< > <= >= == != === !===' 关系运算符

3:转换Boolean类型

  1. ! 逻辑非运算符

2、双等号左右两边的转换规则?

首先需要说明的是,双等符号"==",只判断值是否相等,并不判断类型

  1. 特殊类型null和undefined null == undefined; //true 两者均为空值所以相等
  2. 如果其中一个需要操作的类型是boolean值,那么会通过隐式转换,将false转换为0,true转换为1
  3. 如果一个类型为string,一个类型是number,则先通过隐式转换将string类型转换为number类型,在进行比较
  4. 如果一个操作类型是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…