Javascript
记录一下常见的js问题
==隐式转换
出处:相等运算符
- 如果x不是正常值(比如抛出一个错误),中断执行。
- 如果y不是正常值,中断执行。
- 如果Type(x)与Type(y)相同,执行严格相等运算x === y。
- 如果x是null,y是undefined,返回true。
- 如果x是undefined,y是null,返回true。
- 如果Type(x)是数值,Type(y)是字符串,返回x == ToNumber(y)的结果。
- 如果Type(x)是字符串,Type(y)是数值,返回ToNumber(x) == y的结果。
- 如果Type(x)是布尔值,返回ToNumber(x) == y的结果。
- 如果Type(y)是布尔值,返回x == ToNumber(y)的结果。
- 如果Type(x)是字符串或数值或Symbol值,Type(y)是对象,返回x == ToPrimitive(y)的结果。
- 如果Type(x)是对象,Type(y)是字符串或数值或Symbol值,返回ToPrimitive(x) == y的结果。
- 返回false。
以上是==的执行步骤,总结成以下表格
| 如果x不是正常值(比如抛出一个错误),中断执行。 | |
|---|---|
| 如果y不是正常值,中断执行。 | 至少有一个非正常值,报错 |
| - | - |
| 如果Type(x)与Type(y)相同,执行严格相等运算x === y | |
| - | - |
| 如果x是null,y是undefined,返回true。 | |
| - | - |
| 如果x是undefined,y是null,返回true。 | undf和null比较,都是true |
| - | - |
| 如果Type(x)是数值,Type(y)是字符串,返回x == ToNumber(y)的结果 | |
| - | - |
| 如果Type(x)是字符串,Type(y)是数值,返回ToNumber(x) == y的结果。 | 数值和字符串比较,字符串转成数值跟数值比较 |
| - | - |
| 如果Type(x)是布尔值,返回ToNumber(x) == y的结果。 | |
| - | - |
| 如果Type(y)是布尔值,返回x == ToNumber(y)的结果。 | 如果其中一个是布尔值,就令这个布尔值转成数值进行比较 |
| - | - |
| 如果Type(x)是字符串或数值或Symbol值,Type(y)是对象,返回x == ToPrimitive(y)的结果 | |
| - | - |
| 如果Type(x)是对象,Type(y)是字符串或数值或Symbol值,返回ToPrimitive(x) == y的结果。 | |
| - | - |
| 返回false | |
| - | - |
JavaScript 新增两种数据类型
还没正式上stage-4,目前在stage-2
新增两个类型Record和Tuple,可以看作只读的对象和数组
const record = #{
name: 'aaa'
}
const tuple = #[1,2,3]特点
- 只读,所以里面的数据不能修改
record.name = 'bbb' // error
tuple[1] = 222 // error- 如果两个Record或Tuple里的数据相同,那么可以相等,这对于Object或Array来说是一定不相等的
#[1,2,3] === #[1,2,3]Updated on 5/12/2023
Table of Contents