我不希望您通过这段代码了解的含义:
var columnOverrides = rowMetadata &&
rowMetadata.columns &&
(rowMetadata.columns[column.id] || rowMetadata.columns[getColumnIndex(column.id)]);
return columnOverrides.formatter;
但从语法上讲,如何评估逻辑表达式返回一个对象?
答案 0 :(得分:8)
在JavaScript &&
和||
中,不一定返回true或false。他们返回了他们的一个论点。
a || b
大致相当于a ? a : b
。a && b
大致相当于a ? b : a
。可在此处找到更多信息:
答案 1 :(得分:4)
在JavaScript中,a && b
首先评估a
。如果a
为falsy值,则返回a
,否则返回b
。 a || b
的作用相同;如果a
真实,请返回a
,否则返回b
。
这可以导致一些非常简洁明了的代码(一旦你理解它),比如“获取第一个非空值”:
var a = null;
var b = null;
var c = 5;
var d = "Hello";
alert(a && b && c && d); // 5
或简单的跨浏览器事件:
var f = window.addEventListener || window.attachEvent || (function() {});
f.call(window, 'load', function() {
alert('Loaded!');
}, false);
答案 2 :(得分:2)
当问题得到解答时 - 我认为在此代码中有一个但是rowMetadata
是null
或undefined
或者它会破坏,如果您正在使用{ {1}}这是一种可能性。只是一个抬头。
最后一行也应该是:
&&