【发布时间】:2015-09-05 04:55:15
【问题描述】:
我刚刚浏览了 inArray 方法代码,遇到了以下 ::
inArray: function (elem, arr, i) {
var len;
if (arr) {
if (indexOf) {
return indexOf.call(arr, elem, i);
}
len = arr.length;
i = i ? i < 0 ? Math.max(0, len + i) : i : 0;
for (; i < len; i++) {
// Skip accessing in sparse arrays
if (i in arr && arr[i] === elem) {
return i;
}
}
}
return -1;
},
现在我了解了三元运算符的工作原理,但是有人可以告诉我,下面的代码行是如何工作的吗?它甚至是三元运算符吗?
i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
或者它是 JS 中的某种新结构?
谢谢。
亚历克斯-z。
【问题讨论】:
-
有趣的是,它可以更短:
i = i < 0 ? Math.max(0, len + i) : i || 0; -
@NinaScholz 如果
i被省略,i < 0如何得到评估? -
@scign,我会抛出错误或
undefined(这里,条件为假),取决于严格与否。 -
@NinaScholz “更长”的方式可以避免处理该错误。
标签: javascript ternary-operator