@TedZhou
2019-11-09T08:34:42.000000Z
字数 1210
阅读 626
javascript
JS从诞生到现在已经二十几年了,在其演进中难免引入了一些bug,且积习难改。理解这些缺陷有助于避开那些新手陷阱。
他们都是基本类型,也都只对应一个常量值(分别是null和undefined)。
//已知:typeof undefined === 'undefined'//你可能会以为:typeof null === 'null'//但,不是这样//真相是:typeof null === 'object'//null是指空对象,空对象也是对象!
这些本质上都是对象类型。
//已知:typeof {} === 'object'typeof function(){} === 'function'//你可能会以为:typeof [] === 'array'//但,不是这样的//真相是:typeof [] === 'object'//数组也是对象,基本类型外的除了函数都是对象。
| 类型 | 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' |
相等操作符比较两个值是否可能相等,即如果类型不同则进行可能的类型转换。
0==''//true0=='0'//true0==false//true[1,2]=='1,2'//truenull==undefined//true!null && !undefined//true//注意:null和undefined既不等于true也不等于falsenull==true || null==false//falseundefined==true || undefined==false//false
全等操作符比较两个值是否严格相等,即要求类型一样,也要求值相同。
null===null//trueundefined===undefined//truenull===undefined//false0==='0'//false0===-0//trueNaN===NaN//false?--这个比较有性格
Object.js()比较的结果同全等操作符,除了下面这两个相反:
Objecct.is(NaN,NaN)//trueObjecct.is(0,-0)//false
