JS 基础知识点及常考面试题(一)3

typfof & instanceof

涉及面试题:typeof 是否能正确判断类型?

typeof 对于原始类型来说,除了 null 都可以显示正确的类型

  • 原始类型/基本类型 Number String Boolean Undefined Null Symbol
  • 引用类型 object funtion

typeof 对于对象来说,除了函数都会显示 object

  • const fu = () => {console.log('i')}
  • console.log(typeof(fu)) output :function
typeof [] // 'object'
typeof {} // 'object'
typeof console.log // 'function'

所以说 typeof 并不能准确判断变量到底是什么类型

instanceof 能正确判断对象的原理是什么?
  • 内部机制是通过原型链来判断的
  • 想判断一个对象的正确类型,这时候可以考虑使用 instanceof
  • 直接通过 instanceof 来判断类型是不行的
  • 可以通过Symbol.hasInstance自定义instanceof 行为
  • 这其实也侧面反映了一个问题, instanceof 也不是百分之百可信的。

类型转换

运算符

  • 运算中其中一方为字符串,那么就会把另一方也转换为字符串

  • 如果一方不是字符串或者数字,那么会将它转换为数字或者字符串
    4 + [1,2,3] // "41,2,3"

  • 特例:'a' + + 'b' // -> "aNaN"

  • 解释:+'b'转换失败输出NaN

比较运算符

  • 如果是对象,就通过 toPrimitive 转换对象
  • 如果是字符串,就通过 unicode 字符索引来比较
let a = {
  valueOf() {
    return 0
  },
  toString() {
    return '1'
  }
}
a > -1 // true

在以上代码中,因为 a 是对象,所以会通过 valueOf 转换为原始类型再比较值。

this

bind apply call

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