我对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 转到'过滤数组'练习
谢谢!
答案 0 :(得分:3)
将评估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
。
答案 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,则它将存储在另一个数组中。最终,传递的元素将返回函数调用者。