没有运算符的 "if" 如何工作?

How does this "if" without operators work?

我对 Javascript 比较陌生,正在学习 ch。 Eloquent Javascript 中的 5 个。我遇到了一些我不太明白的代码。我知道它是如何工作的(一般方法和步骤),但我不明白为什么它会工作。

代码在这里:

function filter(array, test) {
  var passed = [];
  for (var i = 0; i < array.length; i++) {
    if (test(array[i]))
      passed.push(array[i]);
  }
  return passed;
}

基本上,该函数从数组中获取元素 'for loop is iterating over',并将其与测试参数进行比较。

我想知道 how/why 这行得通:

if (test(array[i]))

没有|| && 或其他 'comparison operators'。它如何仅使用括号比较值?

test 与没有运算符的数组 [i] 值相比如何?

Link 到文件:http://eloquentjavascript.net/05_higher_order.html 去 'Filtering an Array' 练习

谢谢!

我不太确定,但我认为这是一个自定义函数。很可能那里有一些比较,函数的结果是 True/False。如果您给我们完整的代码,我们可以更好地向您解释。

此代码接受一个 test 参数,即所谓的 "predicate function",即给定元素的函数将 return 真或假。

它将与

一起使用
var big_numbers = filter(numbers, function(x){ return x > 100; });

即预期的参数测试实际上是 code.

在 Javascript 中传递代码是非常常见和惯用的。在不支持 "closure" 和 "nested function" 概念的其他语言中,这是更令人讨厌的事情,迫使所有代码都位于顶层,被赋予名称并且没有上下文(例如C语言)。

if 语句括号内的任何内容都将被计算。如果结果是假的 (false, 0, "", NaN, null, undefined) 它失败,如果结果是真(其他一切)它通过了。因此,如果您的 if 语句包含一个函数调用 if (test(something)) {},那么 if 语句只会显示 if the result of the function call is truthy then pass.

此外,&&|| 不是比较运算符,它们是布尔运算符。它们只是连接两个语句的结果,例如 true || false 的计算结果为 true.

'test'这里是函数,不是值。在Javascript中,每个函数都是一个对象,可以作为参数传递。在这种情况下,test 是一个函数,它接受一个参数,return true 或 false 基于参数值。

因此在for循环中,对每个数组元素调用测试函数,如果结果为真,它将存储在另一个数组中。最终,传递的元素将 return 传递给函数调用者。