这“如果”是怎么回事?无需操作员工作
How does this "if" without operators work?
我对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函数,如果结果为真,则将其存储在另一个数组中。最后,传入的元素将返回给函数调用者。
- Javascript:selenium Web驱动程序isDisplayed()不工作
- jQuery UI自动完成突然停止工作
- AngularJS UI路由器不能像ng路由器那样工作
- HTML5音频加载和播放获胜'我不能在iPad上工作
- JavaScript打印功能使日历停止工作
- Javascript.getHours()工作不正常
- 为什么这在IE中的工作方式与在Firefox中不同
- 视频HTML没有'无法在Internet Explorer 11上工作
- 扩展移相器按钮类不工作
- Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
- 谷歌地图不是以HTML显示,而是在JS Fiddle上工作
- $in操作员钛 SDK 无法 #appcelerator 工作
- 操作员不工作!=
- &操作员未在指令的隔离范围内工作
- Javascript>操作员未在Extension中工作
- Javascript:"!="操作员不'工作不正常
- 不等于<>操作员不工作
- 操作员”>"不会'工作不正常
- 这“如果”是怎么回事?无需操作员工作
- 为什么不't|"操作员为大值工作