扫码关注官方订阅号
http://www.ituring.com.cn/art...非数字(NaN)那一小节 为什么要 typeof newValue === 'number' && typeof oldValue === 'number'判断这个呢?那里不就为了判断两个值是否都为NaN的情况吗?
return newValue === oldValue || (typeof newValue === 'number' && typeof oldValue === 'number' && isNaN(newValue) && isNaN(oldValue));
在这里 newValue === oldValue 的时候,如果两个值都是 undefined,这个等式也成立,不会执行后面的判断。所以这里判断类型绝不是处理 undefined 的情况。
newValue === oldValue
undefined
做以下试验:
isNaN("hello") // true isNaN(true) // false isNaN({}) // true isNaN("1234") // false
基本可以判断,如果某个值可以转换成数值,isNaN() 就会返回 false,否则返回 true。也就是说,isNaN("hello") && isNaN({}) 是成立的,但是很明显 "hello" 和 {} 不等——这才是需要先判断类型是 number 的原因。
isNaN()
false
true
isNaN("hello") && isNaN({})
"hello"
{}
number
isNaN(null) // false isNaN(undefined) // true
undefined被认为也是NaN,所以需要先判断newValue 和 oldValue都是number类型,这样就可以排除undefined了。。
NaN
newValue
oldValue
NaN 本身是 number 类型,排除一切非 number 类型的干扰
在其他语言中 如果一个变量本来应该是 数值的,却是一个 非数值的值,这样会报错,程序会暂停执行。而 js 引进 NaN 就是为了可以让程序继续执行 而不是被中断。
数值
非数值
js
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
在这里
newValue === oldValue的时候,如果两个值都是undefined,这个等式也成立,不会执行后面的判断。所以这里判断类型绝不是处理undefined的情况。做以下试验:
基本可以判断,如果某个值可以转换成数值,
isNaN()就会返回false,否则返回true。也就是说,isNaN("hello") && isNaN({})是成立的,但是很明显"hello"和{}不等——这才是需要先判断类型是number的原因。undefined被认为也是NaN,所以需要先判断newValue和oldValue都是number类型,这样就可以排除undefined了。。NaN 本身是 number 类型,排除一切非 number 类型的干扰
在其他语言中 如果一个变量本来应该是
数值的,却是一个非数值的值,这样会报错,程序会暂停执行。而
js引进NaN就是为了可以让程序继续执行 而不是被中断。