当我正在寻找一种好方法来检查函数变量是数组还是单个变量,然后将两者转换为数组以进行进一步处理时,我遇到了这篇文章。
@VoteyDisciple提供的答案
var eventsArray = events ? [].concat(events) : [];
对我来说工作得很好,直到events
是一个值为零的单个变量。在这种情况下,eventsArray
是空的。下面是我的全部代码:
var eventsArray = [];
if (!(Array.isArray(events))) {
eventsArray = events ? [].concat(events) : [];
} else {
eventsArray = events;
}
我试图在else
行之前再做一个if语句来抓住这个特殊的场合。但这最终会导致其余代码的混乱,我怀疑它是否非常优雅。因此,我想知道是否可以修改这一行:
eventsArray = events ? [].concat(events) : [];
在某种程度上,如果events
是一个值为零的单个变量,这一行也将把这个场合变成一个具有单个元素和值为零的数组?
为了更好地理解,我还想问:为什么这行代码"丢失"了?零,但与任何其他单一值工作得很好?
就简单多了:
eventsArray = Array.isArray(events) ? events : [events];
省略零的原因是零在布尔上下文中是假的,比如条件运算符。您还将丢失null
和空字符串。