gpt4 book ai didi

javascript - 为什么建议为 parseInt() 提供可选的基数参数?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:55:34 24 4
gpt4 key购买 nike

我一直在 Javascript 中使用 parseInt() 函数而不传递 radix 参数。根据 MDN 文档 here ,声明不提供此参数可能会导致不可预测的行为。

Always specify this parameter to eliminate reader confusion and to guarantee predictable behavior.

有人可以通过一些代码示例阐明这种不可预测的行为意味着什么吗?

最佳答案

在旧版本的语言中,parseInt() 会导致函数遵循正常的 JavaScript 数字常量语法规则,包括识别前导零表示八进制常量,以及前导 0x表示十六进制常量。因此,如果您的代码没有明确坚持以 10 为基数,带有前导零的杂散(可能是用户提供的)数字将被解释为以 8 为基数的值,而前导 0x 为十六进制。

自 ES5.1 以来,以 8 为基数的行为已经消失(我认为;可能更早),但以 16 为基数的行为仍然存在。 (作为意外前缀,前导 0x 可能比简单的前导 0 更罕见。)

我在 Stack Overflow 上查看代码的经验是 parseInt() 无论如何都被过度使用了。使用一元 + 运算符将字符串(通常是从 DOM 元素 .value 属性中获取的字符串)转换为数字会更干净通常:

var count = +document.getElementById("count").value;

当然,这不一定会给你一个整数。但是,它 做的是注意到输入字符串尾随有非数字垃圾。 parseInt() 函数将简单地停止解析像“123abc”这样的字符串,并为您提供 123 作为数值。然而,领先的 + 会给你一个 NaN

如果您需要整数,您始终可以使用 Math.floor()Math.round()

edit — 评论指出 ES2015 要求在八进制文字的“严格”模式下使用前导 0o0O,但事实并非如此t 适用于 parseInt(),它(在 ES2015 中)仅覆盖十六进制字符串的默认基数。

关于javascript - 为什么建议为 parseInt() 提供可选的基数参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44971276/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com