2012-07-10 51 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