传递布尔值作为参数是如何工作的?



好的,问题是,给定一个数组,删除所有'falsey'的元素。

这是我对上述问题的解决方案(有效(:

function bouncer(arr) {
var trueArr = [];
for(i=0; i<arr.length; i++){
if (arr[i]){
trueArr.push(arr[i]);
}
}
return(trueArr);
}
bouncer([7, "ate", "", false, 9]);

这有效,并通过测试。但这是给出的解决方案:

function bouncer(arr) {
return arr.filter(Boolean);
}

我已经阅读了关于布尔和过滤器的 MDN 文章,但仍然不明白这是如何工作的?这里到底发生了什么?布尔值是回调函数吗?如果是这样,后端是如何工作的?我只是坐在这里挠头。

从过滤器:

回调 函数是一个谓词,用于测试数组的每个元素。返回 true 以保留元素,否则返回 false

从布尔值

作为第一个参数传递的值将转换为布尔值

所以是的。这是回调。它是一个返回 true 或 false 的函数(内置于 JS 语言中(,这是过滤器函数期望传递给它的函数执行的操作。

Boolean对象是布尔值的对象包装器。调用Boolean时,您实际上是在调用带有参数的函数(请参阅代码片段( - 这正是您在回调中需要的Array.filter().

new Boolean([value])被称为

根据参数的不同,返回的值将为truefalse(请参阅代码片段(。

console.log(Boolean); //Constructor
console.log(Boolean(0)); //Falsy value
console.log(Boolean("foo")); //Truthy value

function bouncer(arr) {
return arr.filter(Boolean);
}

上面的代码等效于:

function bouncer(arr) {
return arr.filter(function(arr) {
return Boolean(arr);
});
}

此外,Boolean在传递假参数时返回false。结果,这些被过滤掉了。

arr.filter(Boolean);

arr.filter(function (x) { return Boolean(x); });

由于布尔构造函数也是一个函数,因此它返回 true 对于"真实"论点或对于"虚假"论点是假的。

http://www.devign.me/javascript-tip-remove-falsy-items-out-of-an-array

最新更新