没有运营商的这个“如果”如何运作?

时间:2015-08-01 06:28:00

标签: javascript arrays function comparison operator-keyword

我对Javascript相对较新,正在研究ch。 5个Eloquent Javascript。我遇到了一些我不太了解的代码。我知道它是如何工作的(一般方法和步骤),但我不明白为什么它有效。

代码在这里:

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循环迭代'元素,并将其与测试参数进行比较。

我想知道这是如何工作的:

if (test(array[i]))

没有|| &安培;&安培;或其他'比较运营商'。如何仅使用括号比较值?

如何将测试与没有运算符的array [i]值进行比较?

链接到文件:http://eloquentjavascript.net/05_higher_order.html 转到'过滤数组'练习

谢谢!

4 个答案:

答案 0 :(得分:3)

将评估if语句括号内的内容。如果结果是假的(false0""NaNnullundefined),则会失败,如果结果是真实的(其他一切)它通过。因此,如果if语句包含函数调用if (test(something)) {},那么if语句只是说if the result of the function call is truthy then pass

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

此代码接受test参数,即所谓的&#34;谓词函数&#34;即给定元素的函数将返回true或false。

它将用于例如

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

即。预期的参数测试实际上是代码

在Javascript中传递代码是非常常见和惯用的。在其他语言中,不支持&#34;关闭&#34;的概念更烦人。和#34;嵌套函数&#34;,强制所有代码都存在于顶层,被赋予一个名称并且没有上下文(例如C语言)。

答案 3 :(得分:0)

&#39;测试&#39;这是一个函数,而不是一个值。在Javascript中,每个函数都是一个对象,可以作为参数传递。在这种情况下,test是一个函数,它接受一个参数并根据参数值返回true或false。

因此在for循环中,使用每个数组元素调用test函数,如果结果为true,则它将存储在另一个数组中。最终,传递的元素将返回函数调用者。