【问题标题】:faster boolean from string conversion从字符串转换更快的布尔值
【发布时间】:2011-12-04 21:07:06
【问题描述】:

对于数字,您可以使用+"10" 而不是Number("10"),后者更快。有没有办法对字符串中的布尔值执行此操作?

【问题讨论】:

  • Boolean("false")true,顺便说一句。
  • @FelixLo​​ether 这当然是我的疏忽。 +1

标签: javascript boolean


【解决方案1】:

使用正则表达式很愚蠢。如果您真的只想匹配字符串 'true' 并且不关心区分大小写,只需与该字符串进行比较:

function parseBoolean(s)
{
    return s === 'true';
}

我想如果我真的要和你玩“填空”,我会回答:

+"10" is to Number("10") as !!"true" is to Boolean("true")

因为Boolean(x) 仅在x 为假值时,即x ∊ {null, undefined, false, 0, ''} 时返回false

【讨论】:

  • 这似乎确实是最快的解决方案:jsperf.com/string-to-boolean
  • 在函数中添加了s === 'true',因为函数调用开销可能不可忽略:jsperf.com/string-to-boolean/2。有趣的是,在我的机器上,你的 Object Map 方法是最快的。
  • @MДΓΓБДLL 我最终可能会使用您的 jsperf 中的 biziclops 答案变体,感谢您的速度测试参考。 +1
【解决方案2】:

一些不太好的和邪恶的解决方案:

window.toBool = {'false':false,'true':true};
toBool['false'] === false

eval('false') === false // don't ever do this!

JSON.parse('false')

【讨论】:

  • 第一个 deffo 不太好,因为 toBool[42]undefined
  • 这些都是反面例子:)
  • @biziclop 你肯定有一些与 toBool 想法有关的东西。我会向您发送积分,但window 的前缀与我最近阅读的一些最佳实践不太相符。 +1
【解决方案3】:

如果匹配单词true 的所有大小写变体是要求,我相信使用正则表达式是最快的,例如:

/^true$/i.match(input)

【讨论】:

  • 只有在不区分大小写的情况下才快速。
猜你喜欢
  • 1970-01-01
  • 2018-09-07
  • 1970-01-01
  • 2016-10-18
  • 2013-01-24
  • 2021-05-07
  • 2012-03-10
  • 2012-12-16
  • 1970-01-01
相关资源
最近更新 更多