【问题标题】:Parse a JavaScript string best practice解析 JavaScript 字符串最佳实践
【发布时间】:2010-11-10 11:32:30
【问题描述】:

我有这个

   var checkBox = e.target;

    var tableRow = checkBox.parentNode.parentNode;
    var key = tableRow.attributes["key"];
    var aKey = key.nodeValue;

此时aKey = "[123]"

在 javascript 中将 123 作为 int 返回的最佳方法是什么?请注意,aKey 很可能是“[5555555555555555555]”,所以我不能只抓取字符 2-4。我需要一些更有活力的东西。我希望这可以像单元素数组一样解析,但我认为这是不正确的。这实际上是 Infragisitcs 网格的数据键。他们的支持不是很有帮助。

感谢您的建议。

干杯, ~ck 在圣地亚哥

【问题讨论】:

  • 你的数字真的有那么大吗? JavaScript 没有足够的尾数让您可靠地存储这些数字。我刚刚检查了 Chome 的控制台,5555555555555555555 存储为 5555555555555555000。

标签: javascript arrays string parsing


【解决方案1】:

只要您的密钥适合 int 而不会溢出,您就可以这样做

numericKey = parseInt(aKey.substr(1, aKey.length - 2))

【讨论】:

  • 根据他的第二个例子,他的数字不适合 int。不过,不确定他是否真的会得到这么大的数字。他可能夸大了。 :-)
  • 如果数字可以有前导零,您应该通过将 10 作为第二个参数传递给 parseInt 来指定以 10 为底。否则,它将被解释为八进制数。
【解决方案2】:

我认为如果它始终采用这种格式,您可以安全地使用eval() 将其转换为数组并获取第一个元素。

var aKey = eval( key.nodeValue );
var nKey = aKey[0];

【讨论】:

  • 因为是nodeValue,所以不喜欢这个选项。
【解决方案3】:

包括

<script src="http://json.org/json2.js"></script>

这将在没有它的浏览器上为您提供一个 JSON 对象,但会在可用时使用浏览器实现。

然后

JSON.parse(aKey);

这将为您提供数组。

【讨论】:

    【解决方案4】:

    您的 5555555555555555555 示例超过了可以以 JavaScript 的 IEEE-754 双精度浮点格式可靠存储的最大“整数”,即 9007199254740992。希望您只是将这个疯狂的大数字加起来,而您的整数不会得到差不多这么大。

    如果你真的得到这么大的数字,你可能需要将你的数字保存在一个字符串中,将大数字分成多个部分,或者使用a bigint library

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-31
      • 1970-01-01
      • 1970-01-01
      • 2021-09-23
      • 1970-01-01
      • 2017-12-01
      相关资源
      最近更新 更多