js基础回顾-1-数据类型进阶
1.typeof思考
- 现象:typeof null 返回object
- 原因:js v1使用的是32位二进制存储数据,前三位表示数据类型,000表示对象,null的机器码为32位的0,所以typeof null 得到的是object.
2.一元运算符+号转数字
- 现象:+null => 0
- 原因: 一元运算符+号运算会进行隐式转换,将变量的值转化为数字类型,对象会转化为原始值调用numberof方法,无法转换返回NaN,比如undefined,{}
3. 位移运算转数字
- 将数字转化为二进制,然后进行位移,再转化为十进制
4. parseInt转数字
- parseInt第二个参数是进制,范围在2-36,超过返回NaN
5. 布尔值转化规则
- null, undefined,0,NaN会转化为false
6.二元操作符+号
- 操作数是对象会转化为原始值
- {}+{}前一个会被识别为语句{};所以最后会返回NaN
7. 数据类型检测方案
- typeof: 基本数据类型除了null 都可以,引用数据类型可以检测函数
- instanceOf 引用数据类型可以,基本数据类型不可以
- constructor 部分基本数据,全部引用数据
- object.prototype.tostring 基本和引用都可以
- isprototypeOf 和instanceof类似
8. 宽松比较的隐式数据转化
- 判断是不是null和undefined比较
- 判断是不是数字和字符串比较,是的话都转化为数字
- 有一方是布尔值,先转化为数字再比较
- 对象和原始数据类型比较,转化为原始数据类型
9. 增强NaN
- NaN是唯一一个和自身不相等的数值
- isNaN会先检查调用toNumber是否返回数字,如果不是,表明他不是数字
- Number.isNaN是直接判断当前参数是不是NaN