2011-11-05 121 views
1

我不希望你明白什麼意思這段代碼:JavaScript評估如何返回對象?

var columnOverrides = rowMetadata && 
    rowMetadata.columns && 
    (rowMetadata.columns[column.id] || rowMetadata.columns[getColumnIndex(column.id)]); 

return columnOverrides.formatter; 

但語法,邏輯表達式的計算如何能夠返回一個對象?

+1

''||則往往意味着在這種情況下「默認」操作。 – hugomg

回答

4

在JavaScript中,a && b評估a第一。如果afalsy的值,則它返回a,否則返回ba || b工作原理相同;如果a是truthy,則返回a,否則返回b

這可能會導致一些非常不錯的,簡潔的還不清楚代碼(一旦你明白了),如「得到第一個非空值」:

var a = null; 
var b = null; 
var c = 5; 
var d = "Hello"; 

alert(a && b && c && d); // 5 

或Easy跨瀏覽器事件:

var f = window.addEventListener || window.attachEvent || (function() {}); 
f.call(window, 'load', function() { 
    alert('Loaded!'); 
}, false); 
+0

真的很不錯的例子,特別是第二個 - 它正在吹噓我的想法。 – vemv

2

隨着問題得到回答 - 我認爲是有,但在此代碼 - 如果rowMetadatanullundefined或者這樣會打破,如果你正在使用&&這是一個可能性。只是一個頭。

最後一行也應該是:

return columnOverrides && columnOverrides.formatter; 
+0

耶穌,你有一些認真的技能!事實上,最初的「返回」更爲複雜 - 爲了使問題更清楚,我把它縮小了 - 實際上它使用了這種短路方式。 – vemv