2012-07-10 54 views
2

是否有一个函数(或语言结构)可用于仅评估true(以及其他任何其他值为false)的值?JavaScript:解析bool

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 
]; 
+1

'!!〜trueValues.indexOf(something)'。 (You * did *指定“仅以下值”。) – 2012-07-10 17:41:14

+0

可能重复: http://stackoverflow.com/questions/263965/how-can-i-convert-a-string-to-boolean-in-javascript – 2012-07-10 17:41:51

+0

无论如何,你给出的所有值在被转换为布尔值时都会评估为“true”。你想达到什么目的? – jbabey 2012-07-10 17:42:49

回答

1

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

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) 
} 
+0

'1.0001'呢? – 2012-07-10 17:49:43

+0

好点,更新后看起来更像你的解决方案,除了回退到'.trim()'...有争议的更好,但我喜欢你的简单性和可读性。 – Cecchi 2012-07-10 17:52:07

4

时返回1假设你的意思是那些作为例子,你真正的意思是:

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

下面的两个条件将过滤掉所有例外值。

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