2015-07-05 47 views
0

在javascript中,我們使用shortand notation if(input){}來檢查是否爲空或空輸入。我們將爲Null, Undefined, false, 0, NAN, ""假。我的要求是,我想真正爲任意數量,包括零,所以我創建了一個方法如下Javascript優化除零以外的錯誤語句的檢查方式

function checkFalseExceptZero(value){ 

    if(value !== undefined && value !== null && value !== false && value !== "" && value.length !== 0) return true; 
    else return false; 
} 

我添加了所有可能的檢查,在上面的方法來獲得所需的結果。我很好奇,如果有快速,甜蜜,短暫或更穩健的方法來實現這一目標?

+8

'回報!值|| value === 0' – JJJ

+0

嘗試'typeof value ===「number」'或boolean。但是三個等於不應該改變類型,因此'0 === false'產生'false' –

回答

1

一個簡單易懂的答案。 三等號在JS中不會轉換類型來檢查值是否等於兩個等號

0 == false //true 
0 === false //false, because 0 is a number and false is a boolean 

因此,答案,如果你想要把它一個函數內部:

JS:

function isNumber(v) { 
    return typeof v === "number" 
} 

功能將檢查變量的類型。所以實際上並沒有比較這個值來確定結果。如果該變量的類型被稱爲number,該函數將只返回true。

測試運行:

isNumber(0) //true 
isNumber(false) //false 
isNumber("0") //false 
isNumber(undefined) //false 

如果你想知道,typeof variable將返回一個字符串。

+0

小警告,可能對OP沒有影響,但爲了提及它:像'3'這樣的字符串不是數字,但可以用於計算。 NaN返回true,因爲它被認爲是一個數字類型。 –

+1

@torazaburo OP想讓「包括零在內的任何數字都成立」 –

2

我的要求是,我想真正爲任意數量,包括零 所以我創建了一個方法如下

function checkFalseExceptZero(value){ 
if (variable.constructor === Array) return !!value.length; 
return value === 0 || !!value; 
} 

這是一個較短的版本的功能。僅當值爲0或trully值時,纔會返回true。 所以:

checkFalseExceptZero(null) ==> false; 
checkFalseExceptZero(undefined) ==> false; 
checkFalseExceptZero(false) ==> false; 
checkFalseExceptZero("") ==> false; 
checkFalseExceptZero(0) ==> true; 
checkFalseExceptZero([]) ==> false; 
checkFalseExcpetZero([1]) ==> true; 
+0

'value = []'將返回true。 –

+1

@torazaburo是的,我認爲是的。但在原來有'&& value.length!== 0' –

+0

範圍可能有點不清楚。 @GiuseppePes在長度檢查使用的OP上做了一個很好的地方。根據OP發佈的要求,看起來他可能希望只返回包括零在內的數字。說「否則,返回假」是否有意義? –

1

對於任何有效的數字,包括0,JavaScript的已公開isFinite功能。這將返回錯誤對於所有非數字,以及無限大和NaN

例子(摘自鏈接MDN頁):

isFinite(Infinity); // false 
isFinite(NaN);  // false 
isFinite(-Infinity); // false 

isFinite(0);   // true 
isFinite(2e64);  // true 


isFinite("0");  // true, would've been false with the 
        // more robust Number.isFinite("0")