【问题标题】:JavaScript: Parsing a boolJavaScript:解析布尔值
【发布时间】:2012-07-10 17:38:15
【问题描述】:

是否有一个函数(或语言结构)我可以仅用于评估 true 的以下值(以及 false 的任何其他值)?

var trueValues = [
    true,               // boolean literal
    "true",             // string literal
    "\t tRUe ",         // case-insensitive string literal with leading/trailing whitespace
    1,                  // number literal
    1.00,               // number literal
    "1",                // string literal of number literal
    "1.0",              // string literal of number literal
    "1.00000000"        // string literal of number literal
];

【问题讨论】:

  • !!~trueValues.indexOf(something)。 (您确实指定了“仅以下值”。)
  • 无论如何,当转换为布尔值时,您给出的所有值都会评估为 true。你想完成什么?
  • 听起来有点恶心。你希望\t tRUetrue,但\t tRefalse。也许你应该重新考虑你的需求。
  • 谁知道,如何区分1.001

标签: javascript parsing boolean


【解决方案1】:

假设您的意思是这些示例并且您的意思是:

  1. 解释为字符串,仅包含不区分大小写的单词“true”以及可选的周围空格。
  2. 解释为数字,计算结果正好为 1。

以下两个条件会过滤掉所有异常值。

/^\s*true\s*$/i.test(value) || Number(value) == 1

【讨论】:

    【解决方案2】:

    以下将修剪任何空白,将其更改为小写,并将其与字符串文字 true 进行比较。将返回true 值的另一种情况是传递给parseInt() 时返回1 的数字

    if(!String.prototype.trim) {
      bool = (val.replace(/^\s\s*/, '').replace(/\s\s*$/, '').toLowerCase() === "true" || Number(val) === 1)
    } else {
      bool = (val.trim().toLowerCase() === "true" || Number(val) === 1)
    }
    

    【讨论】:

    • 好点,更新后看起来更像您的解决方案,除了回退到 .trim()... 有争议的是哪个更好,但我喜欢您的简单性和可读性。
    猜你喜欢
    • 1970-01-01
    • 2011-07-10
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    • 2013-02-07
    • 2017-01-20
    相关资源
    最近更新 更多