现代 Javascript 教程:类型转换
全等操作,不会做任何的类型转换
非 Number 类型:类型相等,值相等,则这两个被比较的值相等
Number 类型:都不是 NaN,并且数值相同,则这两个被比较的值相等
+0 等于 -0
NaN 不等于 NaN
比较前将两个被比较的值转换为相同类型,最终的比较方式等同于全等操作符 === 的比较方式
当对不同类型的值进行比较时,JavaScript 会首先将其转化为数字(number)再判定大小
number 类型转换规则:
| 值 | 变成…… |
|---|---|
undefined | NaN |
null | 0 |
true 和 false | 1 and 0 |
string | 去掉首尾空格后的纯数字字符串中含有的数字。如果剩余字符串为空,则转换结果为 0。否则,将会从剩余字符串中“读取”数字。当类型转换出现 error 时返回 NaN。 |
- alert( Number(" 123 ") ); // 123
- alert( Number("123z") ); // NaN(从字符串“读取”数字,读到 "z" 时出现错误)
- alert( Number(true) ); // 1
- alert( Number(false) ); // 0
Object.is() 方法判断两个值是否为同一个值,不做类型转换,如果满足以下任意条件则两个值相等:
都是 undefined
都是 null
都是 true 或都是 false
都是相同长度、相同字符、按相同顺序排列的字符串
都是相同对象(意味着都是同一个对象的值引用)
都是数字且(+0 不等于 -0;NaN 等于 NaN)
- // Case 1: Evaluation result is the same as using ===
- Object.is(25, 25); // true
- Object.is('foo', 'foo'); // true
- Object.is('foo', 'bar'); // false
- Object.is(null, null); // true
- Object.is(undefined, undefined); // true
- Object.is(window, window); // true
- Object.is([], []); // false
- var foo = { a: 1 };
- var bar = { a: 1 };
- Object.is(foo, foo); // true
- Object.is(foo, bar); // false
-
- // Case 2: Signed zero
- Object.is(0, -0); // false
- Object.is(+0, -0); // false
- Object.is(-0, -0); // true
- Object.is(0n, -0n); // true BigInt类型
-
- // Case 3: NaN
- Object.is(NaN, 0/0); // true
- Object.is(NaN, Number.NaN) // true
与同值相等类似,不过会认为 +0 与 -0 相等。