diff --git a/docs/operators/comparison.md b/docs/operators/comparison.md index 17d7ad1..bea7d22 100644 --- a/docs/operators/comparison.md +++ b/docs/operators/comparison.md @@ -274,16 +274,19 @@ v1 === v2 // true ```javascript [1] == 1 // true -// 等同于 Number([1]) == 1 +// 等同于 Number([1].toString()) == 1 [1] == '1' // true -// 等同于 Number([1]) == Number('1') +// 等同于 [1].toString() == '1' + +[1, 2] == '1,2' // true +// 等同于 [1, 2].toString() == '1,2' [1] == true // true -// 等同于 Number([1]) == Number(true) +// 等同于 Number([1].toString()) == Number(true) ``` -上面代码中,数组`[1]`与数值进行比较,会先转成数值,再进行比较;与字符串进行比较,会先转成数值,再与字符串进行比较,然后字符串也会转成数值;与布尔值进行比较,两个运算子都会先转成数值,然后再进行比较。 +上面代码中,数组`[1]`与数值进行比较,会先转成数值,再进行比较;与字符串进行比较,会先转成字符串,再与字符串进行比较;与布尔值进行比较,两个运算子都会先转成数值,然后再进行比较;总之,对象转化为原始类型后,再按照原始类型的比较规则进行比较。 **(3)undefined 和 null** diff --git a/docs/types/number.md b/docs/types/number.md index be3c3f4..49405ad 100644 --- a/docs/types/number.md +++ b/docs/types/number.md @@ -473,14 +473,18 @@ parseInt('1000', 8) // 512 上面代码中,二进制、六进制、八进制的`1000`,分别等于十进制的8、216和512。这意味着,可以用`parseInt`方法进行进制的转换。 -如果第二个参数不是数值,会被自动转为一个整数。这个整数只有在2到36之间,才能得到有意义的结果,超出这个范围,则返回`NaN`。如果第二个参数是`0`、`undefined`和`null`,则直接忽略。 +如果第二个参数不是数值,会被自动转为一个整数。这个整数只有在2到36之间,才能得到有意义的结果,超出这个范围,则返回`NaN`。如果第二个参数转化为数值后是0、NaN或绝对值大于等于Math.pow(2,32)的数,则直接忽略。 ```javascript parseInt('10', 37) // NaN parseInt('10', 1) // NaN parseInt('10', 0) // 10 -parseInt('10', null) // 10 -parseInt('10', undefined) // 10 +parseInt('10', NaN) // 10 +parseInt('10', Math.pow(2, 32)) // 10 +parseInt('10', Math.pow(2, 32) - 1) // NaN +parseInt('10', -Math.pow(2, 32)) // 10 +parseInt('10', -Math.pow(2, 32) + 1) // NaN + ``` 如果字符串包含对于指定进制无意义的字符,则从最高位开始,只返回可以转换的数值。如果最高位无法转换,则直接返回`NaN`。