js基础回顾-1-数据类型进阶

55 阅读2分钟

1.typeof思考

  1. 现象:typeof null 返回object
  2. 原因:js v1使用的是32位二进制存储数据,前三位表示数据类型,000表示对象,null的机器码为32位的0,所以typeof null 得到的是object.

2.一元运算符+号转数字

  1. 现象:+null => 0
  2. 原因: 一元运算符+号运算会进行隐式转换,将变量的值转化为数字类型,对象会转化为原始值调用numberof方法,无法转换返回NaN,比如undefined,{}

3. 位移运算转数字

  1. 将数字转化为二进制,然后进行位移,再转化为十进制

4. parseInt转数字

  1. parseInt第二个参数是进制,范围在2-36,超过返回NaN

5. 布尔值转化规则

  1. null, undefined,0,NaN会转化为false

6.二元操作符+号

  1. 操作数是对象会转化为原始值
  2. {}+{}前一个会被识别为语句{};所以最后会返回NaN

7. 数据类型检测方案

  1. typeof: 基本数据类型除了null 都可以,引用数据类型可以检测函数
  2. instanceOf 引用数据类型可以,基本数据类型不可以
  3. constructor 部分基本数据,全部引用数据
  4. object.prototype.tostring 基本和引用都可以
  5. isprototypeOf 和instanceof类似

8. 宽松比较的隐式数据转化

  1. 判断是不是null和undefined比较
  2. 判断是不是数字和字符串比较,是的话都转化为数字
  3. 有一方是布尔值,先转化为数字再比较
  4. 对象和原始数据类型比较,转化为原始数据类型

9. 增强NaN

  1. NaN是唯一一个和自身不相等的数值
  2. isNaN会先检查调用toNumber是否返回数字,如果不是,表明他不是数字
  3. Number.isNaN是直接判断当前参数是不是NaN