扫码关注官方订阅号
传入长度为1的数组时
isNaN([1]); //false
但是
isNaN([1,2]); //true
还有
NaN === NaN //false
好神奇啊。
闭关修行中......
NaN !== NaN 是可以理解的,毕竟 4 / 'error' 也不该等于 5 / 'error'。
NaN !== NaN
4 / 'error'
5 / 'error'
isNaN([1]) 为 false,是因为 isNaN 接受的是数字类型,于是 [1] 被自动转换为了数字类型再传递给 isNaN,而转换结果是 1。不信你可以看到 Number([1]) 是 1。
isNaN([1])
false
isNaN
[1]
1
Number([1])
而你可以看到 Number([1,2]) 的结果是 NaN,于是 isNaN([1,2]) 自然是 true 了。
Number([1,2])
NaN
isNaN([1,2])
true
上边都说得差不多了,就是数组转换成数字的问题。一般对象转换成数字先调用valueOf方法,如果有这个方法并且返回值就用它。没有的话就调用toString方法。数组的valueOf返回数组本身,所以会调用toString。空数组toString是””,空串转数字是0。[1].toString是”1”,转数字是1。[1,2].toString是”1,2”,这个字符串转换成数字是NaN.
[1](1个数字元素),转换成字符串为"1",因为类型转换所以数字是9.所以isNaN就是false了。[1,2](一个数组),类型转换成数字就是NaN了!
[1,2]
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
NaN !== NaN是可以理解的,毕竟4 / 'error'也不该等于5 / 'error'。isNaN([1])为false,是因为isNaN接受的是数字类型,于是[1]被自动转换为了数字类型再传递给isNaN,而转换结果是1。不信你可以看到Number([1])是 1。而你可以看到
Number([1,2])的结果是NaN,于是isNaN([1,2])自然是true了。上边都说得差不多了,就是数组转换成数字的问题。一般对象转换成数字先调用valueOf方法,如果有这个方法并且返回值就用它。没有的话就调用toString方法。数组的valueOf返回数组本身,所以会调用toString。空数组toString是””,空串转数字是0。[1].toString是”1”,转数字是1。[1,2].toString是”1,2”,这个字符串转换成数字是NaN.
[1](1个数字元素),转换成字符串为"1",因为类型转换所以数字是9.所以isNaN就是false了。[1,2](一个数组),类型转换成数字就是NaN了!