你不知道的js(中)

164 阅读2分钟

第三章 原生函数

  1. [[class]
  • toString()获得原生类型

Object.prototype.toString.call(variable)

第四章 强制类型转换

  1. 抽象类型转换: String() => toString() Number() => toNumber() Boolean() => toBoolean()
  • String() toString array,object,JSON.stringify(obj,[function][arr],space)内的不安全值有 undefined,function,symbol,在序列化对象时忽略相应属性,在数组序列化时返回null

  • Number() Number("") = 0 Number([]) = 0
  • Boolean() 假值: null,undefined,"",+0,-0,NaN,false 非假值则为真

  • toPrimitive() 抽象操作,当非基本类型时调用valueOf()后 toString()某一时刻至处于基本类型时在进行强制类型转化 Number([42]) //42
  1. 类型转换
  • 数字和字符串的转化: Number()/parseInt(string,bin)/+'32'/+new Date()/~|(32位数上~(下|)取整,~ = -(x+1) |(或) 转化成32位数) String()/toString()/JSON.stringify()

parseInt(string,bin) 参数为字符串进行解析,故会将传入参数强制转化为字符串,第2个参数为转化整数后的进制

  • 布尔类型转化: Boolean()/ !!/! 非假值则为真 Boolean([]) = true 对Boolean类型的值进行+操作,操作数是什么就强制转化为什么类型 3 + true = 4; '3' + true = '3true'
  • || && 数据选择符 || : 第一个操作数为true返回第一操作数否则返回第2个操作数 a ? a : b &&第一个操作数为false返回第一操作数,否则返回第二个操作数 a ? b : a;&& 和 ||具有短路现象, && 优先级高于||

  • 符号类型的转换:转化成数字将会出错,+隐式转化成字符串会出错,可以显示强制化成字符串,转化成boolean类型为true

3. ==(宽松比较)和===(严格比较)

  • 有无类型转换
  • == typeof 比较类型,不同则进行强制类型转化 boolean,string都是转化成Number在进行比较的,案例如下;null == undefined 除此外null undefined不等于(==)任何值
  • === typeof 比较类型,相同则比较值
  • 常规比较案例
  • 对象和非对象向比较 进行抽象操作,Object(a) 用相应的原生对象对数据进行封装
  • 转化成数字进行比较 '\n','',' '多个空格转化成数字时为0
  1. 抽象关系比较 a < b a >= b !(a < b) 先调用toPrimitive 出现非字符串,则toNumber()强制类型转换,否则都为字符串根据ASCII码进行比较

第五章 语法