没有运算符的 "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 传递给函数调用者。
我对 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 传递给函数调用者。