JS从诞生到现在已经二十几年了,在其演进中难免引入了一些bug,且积习难改。理解这些缺陷有助于避开那些新手陷阱。
typeof相关
Null和Undefined
他们都是基本类型,也都只对应一个常量值(分别是null和undefined)。
1 | //已知: |
Object、Array、Function、RegExp、Date、Error、…
这些本质上都是对象类型。
1 | //已知: |
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 |
严格比较===
全等操作符比较两个值是否严格相等,即要求类型一样,也要求值相同。
1 | null===null//true |
同值相等Object.is()比较
Object.js()比较的结果同全等操作符,除了下面这两个相反:
1 | Objecct.is(NaN,NaN)//true |