Silencer-1984 / Summary-of-front-end-work

总结包括一切关于前端学习的东西,面试、学英语、开发规范
0 stars 0 forks source link

基本类型和==以及箭头函数 #1

Open Silencer-1984 opened 3 years ago

Silencer-1984 commented 3 years ago

Null bug

另外对于 null 来说,很多人会认为他是个对象类型,其实这是错误的。虽然 typeof null 会输出 object,但是这只是 JS 存在的一个悠久 Bug。在 JS 的最初版本中使用的是 32 位系统,为了性能考虑使用低位存储变量的类型信息,000 开头代表是对象,然而 null 表示为全零,所以将它错误的判断为 object 。虽然现在的内部类型判断代码已经改变了,但是对于这个 Bug 却是一直流传下来。同理null instanceof Object是false

引用类型

当一个对象重新赋值的时候就重新开辟新的堆内存,原来的赋值对象不受影响。

typeof vs instanceof

1.对于基本类型,除 null 以外,均可以返回正确的结果。 2.对于引用类型,除 function 以外,一律返回 object 类型。 3.对于 null ,返回 object 类型。 4.对于 function 返回 function 类型。型

// 其实根据原型链分析就可以得到以下
[] instanceof Object
// true
[] instanceof Array
// true

类型转换

16716dec14421e47.jpg

加法运算符不同于其他几个运算符,它有以下几个特点:

'a' + + 'b' // -> "aNaN"

那么对于除了加法的运算符来说,只要其中一方是数字,那么另一方就会被转为数字

==

  1. 首先会判断两者类型是否相同。相同的话就是比大小了
  2. 类型不相同的话,那么就会进行类型转换
  3. 会先判断是否在对比null和undefined,是的话就会返回true
  4. 判断两者类型是否为string和number,是的话就会将字符串转换为number
  5. 判断其中一方是否为boolean,是的话就会把boolean转为number再进行判断
  6. 判断其中一方是否为object且另一方为string、number或者symbol,是的话就会把object转为原始类型再进行判断 目前==只有一种使用场景就是要判断变量是null或undefined。

箭头函数

奇葩优先级

+的优先级大于三元运算符,所以

  var val = 'smtg';
  console.log('Value is ' + (val === 'smtg') ? 'Something' : 'Nothing');
// Something