We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
本文为读 lodash 源码的第五十三篇,后续文章会更新到这个仓库中,欢迎 star:pocket-lodash
gitbook也会同步仓库的更新,gitbook地址:pocket-lodash
import toNumber from './toNumber.js'
《lodash源码分析之toNumber》
从方法名上看,toFinite 的作用大体有两个:
toFinite
value
number
看看源码:
function toFinite(value) { if (!value) { return value === 0 ? value : 0 } value = toNumber(value) if (value === INFINITY || value === -INFINITY) { const sign = (value < 0 ? -1 : 1) return sign * MAX_INTEGER } return value === value ? value : 0 }
if (!value) { return value === 0 ? value : 0 }
falsely 的值全部转换成 0 。
falsely
0
value = toNumber(value)
只需要调用 toNumber 就可以将 value 转换成 number 类型了。
toNumber
if (value === INFINITY || value === -INFINITY) { const sign = (value < 0 ? -1 : 1) return sign * MAX_INTEGER }
如果转换后的值为正无限值或者负无限值,则将其转换成 js 所能表达的最大的正负值。
js
value === value ? value : 0
在 js 中,NaN 和 NaN 是不相等的,所以可以用这个来判断一个值是否为 NaN ,如果值为 NaN ,则返回 0 。
NaN
署名-非商业性使用-禁止演绎 4.0 国际 (CC BY-NC-ND 4.0)
最后,所有文章都会同步发送到微信公众号上,欢迎关注,欢迎提意见:
作者:对角另一面
The text was updated successfully, but these errors were encountered:
为什么第一个if不直接return 0而要判断一次再返回呢
Sorry, something went wrong.
我猜是处理正负0的问题,如果是 -0,按原样返回 -0
-0
No branches or pull requests
本文为读 lodash 源码的第五十三篇,后续文章会更新到这个仓库中,欢迎 star:pocket-lodash
gitbook也会同步仓库的更新,gitbook地址:pocket-lodash
依赖
《lodash源码分析之toNumber》
源码分析
从方法名上看,
toFinite
的作用大体有两个:value
转换成number
类型看看源码:
判断是否为falsely
falsely
的值全部转换成0
。转换成number
只需要调用
toNumber
就可以将value
转换成number
类型了。处理无限值
如果转换后的值为正无限值或者负无限值,则将其转换成
js
所能表达的最大的正负值。处理NaN
在
js
中,NaN
和NaN
是不相等的,所以可以用这个来判断一个值是否为NaN
,如果值为NaN
,则返回0
。License
署名-非商业性使用-禁止演绎 4.0 国际 (CC BY-NC-ND 4.0)
最后,所有文章都会同步发送到微信公众号上,欢迎关注,欢迎提意见:
作者:对角另一面
The text was updated successfully, but these errors were encountered: