类型
javascript 中有几种数据类型 ?
解析
- 基础类型
- undefined
- Null
- Boolean
- Number 采用 IEEE 754 标准
- String
- Symbol
- BigInt 属于新增类型
- 引用类型
- 内建对象 EMACScript 定义
- Object
- Function
- Set
- WeackSet
- Map
- WeakMap
- Array
- Regexp
- 宿主对象 取决于运行环境,如浏览器、Node.js
- 自定义对象 用户创建的对象
- 内建对象 EMACScript 定义
null undefined 区别?
解析
- 语言层面
- null 表示值为空
- undefined 表示缺省值或默认值
- 功能层面:
- 数值转换
- null 会变为 0
- undefined 变为 NaN
- 数值转换
详细区别参考 阮一峰 undefined 与 null 的区别
Symbol
- 定义无冲突的属性名
- 自定义内部方法
Number
IEEE 754
// 说出下面语句的执行结果,并解释原因
console.log(0.1 + 0.2)
console.log(0.1 + 0.2 === 0.3)
解析
重点是理解 js 数值采用采用 IEEE 754 编码表示数值,,产生原因是二级制表示浮点时某些浮点只能取近似值导致,存在编码误差
推荐视频 watch
- NaN 表示非法数字,利用
NaN !=== NaN
的特性判断 - Infinity 正无穷
- -Infinity 负无穷
注意 Number 类型上包含一系列常量,利用
Object.getOwnPropertyDescriptors(Number)
自行查看
toString
转换为对应进制的字符串- 根据前缀自动判断进制
- 0x 开头 16 进制
- 0 开头 8 进制
整数的加法运算符?
什么是 NaN ,它的类型,如何判断 NaN?
如何判断一个数值是整数,实现 isInteger
js 中类型转换规则?
解析
类型转换分为两种
- 隐式类型转换 典型场景
==
操作触发类型转换,详情参见 equality operator- 运算符操作触发类型转换
+
若存在字符串则进行字符串的连接运算-,*,/,**
转换为数字进行操作
对象转换为数字和准换为字符串的规则,详见
js 权威指南 第六版 3.8.3 章节
- 显示类型转换
- 采用 Boolean,Number,String 等构造器初始化
- 利用 parseInt 转换为整形
类型转换测试用例参见
type-convert.test.js
对象在隐式类型转换中会涉及如下三个函数:
记住如下规则
- 上述原型方法可能被覆盖
- 外部申明对象可以重定义上述方法
- 内建对象例如 array 会创建自定义的 toString
- 原始封装类型
Number
也会重写 toString 方法
- 当采用
+,==
触发隐式类型转换时,调用规则为Symbol.toPrimitive
未重定义则退化到 valueOfvalueOf
若定义则执行,若返回非初始类型,则退化到 toString- toString 若定义则执行,否则触发原生 toString
- 模板运算会直接触发
toString
方法