JS 基础知识点及常考面试题(二)1

顺序Point

'==' '==='

'=='案例一

  • object/function == 原始(基本)类型
    把 object 等引用类型转为原始类型再进行判断
  • '1' == { name: 'yck' } => '1' == '[object Object]' =>//flase

'=='案例二

[] == ![]

  • 0 == false
  • true
以下运算流程
  • 运算符 == ! 运算符的优先级 结合性
  • ==左结合 !右结合优先级! > ==
  • 计算机先运算 ![]
  • 运算对象布尔 运算结果布尔
  • ![]数据类型不同,需求转布尔
  • console.log(Boolean([])) => true
  • ![] => false
  • 对于 ==的运算,左右分别为[]Boolean
  • 引用数据类型转原始类型,机制 => 优先转数字 => [] => 0
  • 最终 比较 0 == false
  • //output true
以下知识点
  • 转Boolean (需要转布尔时,否则转原始类型不等于转布尔)
    在条件判断时,除了 undefined, null, false, NaN, '', 0, -0,其他所有值都转为 true,包括所有对象
    • console.log(Boolean([])) => true
  • js运算符优先级 ==左结合 !右结合 优先级高
    • 运算对象为布尔
    • 运算结果为布尔
    • []转布尔 对象 转布尔 为 true console.log(Boolean([]))
    • console.log(![]) => false
  • 对象Object 引用类型 与基本类型比较 类型转换
  • == 左右两侧数据类型不同 需要将引用类型转换为原始类型才能比较和进行隐式转换
  • 对象的转换原始类型 调用内置的 [[ToPrimitive]] 函数 顺序执行
    • 如果已经是原始类型了,那就不需要转换了
    • 调用 x.valueOf(),如果转换为基础类型,就返回转换的值
    • 调用 x.toString(),如果转换为基础类型,就返回转换的值
    • 如果都没有返回原始类型,就会报错
  • []转原始类型 优先转数字 [] => 0
小结
  • 运算符的优先级和结合性
  • 引用类型需求转布尔时先转布尔,且为true
  • 未指定转原始类型,先valueOf,后toString,均失败则报错
  • null.undefined无toString方法,报错

补充 == 比较 undefined null

知识点

js ==比较规则

基本数据类型(标量):类型相同 直接比较NAN特例
——————————类型不同,左右转为数字比较
引用类型:对象的转换原始类型 调用内置的 [[ToPrimitive]] 函数
————优先valueOF,再然后toString

null undefined 特例
  • undefined 视为标量/基础数据类型,与不同类型标量比较,转数字
  • null 空对象,空指针,调用引用类型转原始类型方法,但是null本身无valueOf,toString方法 ,因此始终返回false

标量 即基本数据类型

null == undefined // true 

null !== undefined // true  全等匹配  不全等 返回false

Boolean(undefined) // false   

Boolean(null)// false  
  
console.log(Number(undefined)) //NAN 

NAN == '标量'/'引用类型' // false NAN的任何运算结果NAN 

undefined==false // false  标量 类型不同 均转数字 转换失败 返回NAN 即false

null==false // false  对象方法转换基本类型
// null空指针,无valueOf,toString方法 故而返回false

'abc'==true // false 标量比较,转数字

' \t\r\n ' == 0     // true

关于控制台(gg,vscode)返回值和undefined

函数{}或者表达式()的返回值

你可能感兴趣的:(JS 基础知识点及常考面试题(二)1)