【发布时间】:2013-01-22 21:09:12
【问题描述】:
我将一个对象用作哈希表,并将常规属性和整数作为键填充到其中。
我现在有兴趣计算这个对象中的键的数量,这些键是数字,但显然 for (x in obj) { if (typeof x === "number") { ... } } 不会产生我想要的结果,因为所有键都是字符串。
因此,我确定如果键的第一个字符是数字,那么它必须是数字就足够了,因此我不担心键“3a”是否“错误地”确定为数字。
鉴于这种放松,我想我可以像这样检查它
for (x in obj) {
var charCode = x.charCodeAt(0);
if (charCode < 58 && charCode > 47) { // ascii digits check
...
}
}
从而避免使用正则表达式和parseInt 等。
这行得通吗? charCodeAt 是 JS 1.2,所以这应该是防弹的,是吗?
提示:我希望看到一个 jsperf 将我的函数与每个人提出的函数进行比较。 :) 我会自己做,但 jsperf 让我很困惑
更新:感谢您启动 JSPerf,它证实了我希望 charCodeAt 函数将执行一段非常快速的代码来读取字符的 int 值。其他方法涉及解析。
【问题讨论】:
-
我觉得不错。 1.2 早在 1997 年就发布了,所以除非你的目标是 Internet Explorer 3.0,否则你会很安全。
-
@Ofear 看来您试图提供不正确的建议。请阅读我的第二段
-
你也需要考虑负整数吗?如果是这样,您还有一个标志可以允许...
-
@ScottSauyet,我做了一个:jsperf.com/is-string-a-number - 随意分叉和编辑。
标签: javascript