2014-02-12 56 views
0

我想檢查response.data.totalRows是否爲空。如何在javascript中檢查isEmpty

if (response!=undefined 
    && response.data!=undefined 
    && response.data.totalRows!=undefined) { 

    alert(response.data.totalRows); 
} 

可以簡化代碼嗎?

更新:似乎沒有像isEmpty(response.data.totalRows)這樣簡單的方法。

+0

檢查空,你可以使用:'如果(response.data.totalRows ==「」)' –

+2

沒有,如果你不能確定這些鍵 –

回答

3

是啊,你可以簡單地這樣做:

if (response && response.data && response.data.totalRows) { 
    alert(response.data.totalRows); 
} 

在JavaScript中,一個對象被轉換爲truthy值,在if使用時。這意味着你可以在if或任何其他布爾語句中「轉儲」該變量,以檢查它是否存在。 this blog post有關於它的更多信息。

請注意,這將警惕什麼,如果totalRows等於0(因爲0被認爲是falsy值)。如果你也想提醒,如果是0,使用此:

if (response && response.data && 
    (response.data.totalRows || response.data.totalRows === 0)) { 
    alert(response.data.totalRows); 
} 

或者:

if (response && response.data && response.data.totalRows !== undefined) { 
    alert(response.data.totalRows); 
} 
+2

不正確的禮物,如果'response.data。 totalRows'爲0,則解析爲false。 – francadaval

+0

@francadaval:好點。稍後我會加入一個調整。 – Cerbrus

+0

最後一點是由於'優先',但只有當所有'keys'(Arun P Johny的+1)都設置爲http://jsfiddle.net/2e4CZ/(有同樣的想法,只是看到你已經做到了;) – loveNoHate

0

只是

response && response.data && response.data.totalRows && alert(response.data.totalRows) 
1

我會寫一個原型(即使不推薦它)

Object.prototype.isEmpty = function(){ 
    return (!this || this===undefined || this===null || !this.hasChildNodes()) 
    ?true 
    :false; 
} 

,然後只用

if(!response.isEmpty()) alert(response.data.totalRows); 

只有方便的,如果你需要的檢查也別處,而不是隻有一個地點。

+0

你知道,'this == undefined'和'this == null'幾乎是一樣的。 – Cerbrus

+0

即使只在一個地方使用它,我認爲它也很方便。使代碼更容易閱讀.. –

+0

感謝Cerbrus的評論,但我必須在這裏說,這兩者之間有一點點區別。如果undefined表示該變量已被聲明但尚未設置,並且null表示該變量尚不存在。但你是對的,這個例子不需要它。我只想每次都檢查一切。 – jPO

1

假設response.data.totalRows必須是一個數組你可以使用:

if (!response.data.totalRows.length) { 
    /* empty array */ 
} 

如果你不能確定totalRows存在,你必須驗證:

if (
    !response || 
    !response.data || 
    !response.data.totalRows || 
    !response.data.totalRows.length 
) { 
    /* is empty */ 
} 

任何值轉換的Boolean。例如:Boolean(response)將返回false,如果response0nullundefined

1

怎麼樣一個try-catch塊?

try{ alert(response.data.totalRows); } 
catch(e) { alert("undefined"); } 
0

如果屬性列表變得很長的還有另一種語法就可以使用,在示例代碼中,我創建了一個功能,因此它可以被重新使用。

// args is { object: the object to check the properties of 
//   properties: an array of strings with property names} 
function isSet(args){ 
    //no checking of arguments 
    var o = args.object, 
    props = args.properties, 
    i = -1,len = props.length 
    while(typeof o !== "undefined" 
    && o !== null 
    && ++i<len){ 
    o = o[props[i]]; 
    } 
    return (typeof o !== "undefined" 
    && o !== null)?true:false; 
} 
var test = { 
    prop1 : { 
    prop2 : "ok" 
    } 
}; 
//check if test.prop1.prop2 is set 
console.log(isSet({ 
    object:test, 
    properties: ["prop1","prop2"] 
}));//=true