我目前正在学习Eloquent Javascript,并遇到了are松鼠的例子。当Jacques(问题的主题)变成松鼠时,我们正在使用一段代码来创建一个表/矩阵。它引用了我们之前做的一本期刊。
这是代码。
function hasEvent(event, entry) {
return entry.events.indexOf(event) != -1;
}
function tableFor(event, journal) {
var table = [0, 0, 0, 0];
for (var i = 0; i < journal.length; i++) {
var entry = journal[i], index = 0;
if (hasEvent(event, entry)) index += 1;
if (entry.squirrel) index += 2;
table[index] += 1;
}
return table;
}
console.log(tableFor("pizza", JOURNAL));
// → [76, 9, 4, 1]
现在我了解了函数tableFor的作用以及它如何引用变量journal中的事件(我们将journal作为单独的文件和引用),但我不理解!=1并返回函数表For内部。我想我们想确定我们正在寻找的这个事件是否返回true,如果是这样的话,为什么我们不输入"if"?或者==0,或者==1?我是不是错过了什么?
如果有人能解释的一切
return entry.events.indexOf(event) != -1;
我们将不胜感激。
indexOf函数返回一个正数(或零),当且仅当传入的内容出现时。如果没有出现,indexOf返回-1。如果事件已经发生,hasEvent函数将返回true,否则将返回false。
OP的要求有两个方面:
indexOf
函数的工作原理- 为什么在比较时不使用
if
语句
第一个问题由公认的答案回答。然而,第二个不是。
OP在接受答案时似乎理解了这一点,但对于这个问题的其他观众来说,可能还不清楚。
function hasEvent(event, entry) {
return entry.events.indexOf(event) != -1;
}
相当于以下内容:
function hasEvent(event, entry) {
if (entry.events.indexOf(event) != -1)
return true;
else
return false;
}