【问题标题】:JavaScript - Why does my parseInt return NaN? [closed]JavaScript - 为什么我的 parseInt 返回 NaN? [关闭]
【发布时间】:2013-01-11 17:27:24
【问题描述】:
var bucketId = $.cookie('bucketId');
console.log(bucketId);

var bucketIdNumber = parseInt(bucketId, 10);
console.log("bucketIdNumber " + bucketIdNumber);

在关于 bucketId 的代码中返回“17”。 那么为什么当我 parseInt bucketId 得到 NaN 时呢?

【问题讨论】:

  • 你确定bucketId"17"
  • parseInt 如果无法将字符串解析为数字,则返回 NaN。例如。 parseInt('asdf10') 将返回 NaN
  • 因为 bucketId 并不是真正的 17 :D 这就是为什么当你硬编码 var bucketId = '17'; 时它可以工作的原因@
  • 是的,根据 console.log()
  • 发布window.btoa(bucketId); 的输出,这将对它进行base64 编码,为我们提供您的字符串的二进制安全表示,以便我们对其进行检查。但是,您也可以自己检查字符串长度,然后您会发现问题。

标签: javascript parseint


【解决方案1】:

如果我理解正确的话,上面的代码相当于:

var bucketId = '"17"';
console.log(bucketId);

var bucketIdNumber = parseInt(bucketId, 10);
console.log("bucketIdNumber " + bucketIdNumber);

在这种情况下,bucketIdNumber 确实返回 NaN。您需要进一步解析此 cookie,并删除所有内引号。

【讨论】:

  • 哦,是的,引号实际上是记录的内容,而不是用于格式化
  • 听起来可能是它?删除内引号的最佳方法是什么?
  • 不存储它们是最好的方法。另一种方法是每次使用parseInt( bucketId.replace(/^"|"$/g, ""), 10) 删除它们
  • @Mark,正如@Esailija 所提到的,如果您可以避免存储它们,那将是理想的。如果没有,那么您可以使用 RegExp 删除它们。类似于这里所做的事情:http://stackoverflow.com/questions/1015844/how-to-remove-all-characters-from-a-string
  • Esailija - 就是这样,我在将它放入 cookie 之前先解析了它。
【解决方案2】:

bucketId 可能不以整数开头。

如果第一个字符不能转换为数字,则 parseInt() 返回 NaN。

【讨论】:

  • 这可能是 Chrome 独有的东西,但 parseInt(' 12 ', 10) 对我有用。
猜你喜欢
  • 2018-10-01
  • 2020-07-01
  • 2016-05-20
  • 2016-11-16
  • 2020-08-03
  • 2021-11-30
  • 2017-01-01
  • 2012-04-28
相关资源
最近更新 更多