这更像是“来自战壕的经验”问题。
鉴于这段javascript
/**
* @param [foo]
* {Object} an optional object (it can be null, undefined, empty, etc..)
* @param [foo.bars]
* {Array} an Array that *might* be in the object
*/
function (foo) {
// I want to get the array, or an empty array in any
// of the odd cases (foo is null, undefined, or foo.bars is not defined)
var bars = [];
if (foo && foo.bars) {
bars = foo.bars
}
// ....
}
我试图缩短这一点;根据{{3}},可以写下:
function (foo) {
var bars = (foo && foo.bars) || [];
// ...
}
我错过了一个不起作用的案例(价值集或其他浏览器)吗?是否有更短/更清洁的方法来做到这一点?
在一个更主观的节点上,你会认为那是不可读的吗?
由于
答案 0 :(得分:4)
这是一种非常有效的方法,只要您知道foo.bars
永远不会被定义为不是数组的真实值(如foo = {bars: 1})
。
这是不可读的,因为大多数Javascript开发都熟悉&&
和||
的工作方式,并且一直使用它们来分配默认值。
答案 1 :(得分:2)
我根本不喜欢它。对于传统的程序员来说,如果(foo&& foo.bars)的计算结果为true,则读取的结果就好,否则它将是一个空数组。
我希望看到以下内容:
var bars = (foo && foo.bars) ? foo.bars : [];