这“如果”是怎么回事?无需操作员工作

How does this "if" without operators work?

本文关键字:操作员 工作 怎么回事 如果      更新时间:2023-09-26

我对Javascript比较陌生,正在学习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循环要迭代的"元素,并将其与test参数进行比较。

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

if (test(array[i]))

没有|| &&或者其他"比较运算符"。它如何与只使用括号比较值?

如何与没有操作符的数组[i]值进行比较?

链接到文件:http://eloquentjavascript.net/05_higher_order.html进入"筛选数组"练习

谢谢!

将计算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

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

此代码接受test参数,该参数称为"谓词函数",即给定元素的函数将返回真或假。

它将被用于例如

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

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

在Javascript中传递代码是非常常见和习惯的。在其他不支持"闭包"answers"嵌套函数"概念的语言中,这是更令人讨厌的事情,迫使所有代码都驻留在顶层,被赋予一个名称并且没有上下文(例如C语言)。

这里的'test'是一个函数,而不是一个值。在Javascript中,每个函数都是一个对象,可以作为参数传递。在本例中,test是一个接受一个参数并根据参数值返回真或假的函数。

在for循环中,对每个数组元素调用test函数,如果结果为真,则将其存储在另一个数组中。最后,传入的元素将返回给函数调用者。