[关闭]
@TedZhou 2019-11-09T08:34:42.000000Z 字数 1210 阅读 280

JS的缺陷

javascript


JS从诞生到现在已经二十几年了,在其演进中难免引入了一些bug,且积习难改。理解这些缺陷有助于避开那些新手陷阱。

typeof相关

Null和Undefined

他们都是基本类型,也都只对应一个常量值(分别是null和undefined)。

  1. //已知:
  2. typeof undefined === 'undefined'
  3. //你可能会以为:
  4. typeof null === 'null'//但,不是这样
  5. //真相是:
  6. typeof null === 'object'//null是指空对象,空对象也是对象!

Object、Array、Function、RegExp、Date、Error、...

这些本质上都是对象类型。

  1. //已知:
  2. typeof {} === 'object'
  3. typeof function(){} === 'function'
  4. //你可能会以为:
  5. typeof [] === 'array'//但,不是这样的
  6. //真相是:
  7. typeof [] === 'object'//数组也是对象,基本类型外的除了函数都是对象。

typeof一览表

类型 Type typeof
布尔 Boolean true 'boolean'
数值 Number 1 'number'
字符串 String '' 'string'
符号 Symbol Symbol() 'symbol'
未定义 Undefined undefined 'undefined'
空* Null null 'object'
对象 Object {} 'object'
下列都属于 对象的派生类型
数组 Array [] 'object'
函数* Function function(){} 'function'
Function class{} 'function'

相等比较

宽松比较==

相等操作符比较两个值是否可能相等,即如果类型不同则进行可能的类型转换。

  1. 0==''//true
  2. 0=='0'//true
  3. 0==false//true
  4. [1,2]=='1,2'//true
  5. null==undefined//true
  6. !null && !undefined//true
  7. //注意:null和undefined既不等于true也不等于false
  8. null==true || null==false//false
  9. undefined==true || undefined==false//false

严格比较===

全等操作符比较两个值是否严格相等,即要求类型一样,也要求值相同。

  1. null===null//true
  2. undefined===undefined//true
  3. null===undefined//false
  4. 0==='0'//false
  5. 0===-0//true
  6. NaN===NaN//false?--这个比较有性格

同值相等Object.is()比较

Object.js()比较的结果同全等操作符,除了下面这两个相反:

  1. Objecct.is(NaN,NaN)//true
  2. Objecct.is(0,-0)//false
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注