From f4db85fbcc688755c22cb9b573b23d5b0bd20214 Mon Sep 17 00:00:00 2001 From: CosSalt Date: Mon, 3 Sep 2018 23:08:11 +0800 Subject: [PATCH 1/2] =?UTF-8?q?[=E5=AF=B9=E8=B1=A1=E4=B8=8E=E5=8E=9F?= =?UTF-8?q?=E5=A7=8B=E7=B1=BB=E5=9E=8B=E5=80=BC=E6=AF=94=E8=BE=83]?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在对象与原始类型值比较中所有都是转化为数值后再进行比较,这与实际情况不同,个人认为是对象转化为原始类型后,再按照原始类型的比较规则进行比较 如 [1, 2] == '1,2' // true 如果转化为数值,Number([1, 2]) 值为 NaN,结果应该为 false --- docs/operators/comparison.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) 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** From 23687d3e995cd56b9e4af316b78b3ff8f418da77 Mon Sep 17 00:00:00 2001 From: odzcdut Date: Thu, 9 May 2019 21:46:30 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E9=93=BE=E6=8E=A5=E5=8F=91=E7=94=9F?= =?UTF-8?q?=E5=8F=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 链接发生了变化 --- docs/types/number.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) 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`。