【发布时间】:2020-03-24 04:22:31
【问题描述】:
为什么在array.filter 中得到这个结果?为什么函数返回偶数?函数内的第一个元素 (2%2) 等于 0, 0 - 1 = -1 是一个负数。应该过滤负数。
var c = new Array(1, 2, 3, 4, 5, 6);
var b = c.filter(function(a) {
return (a % 2) - 1;
});
//output [2,4,6]
没看懂,请帮帮我
其他例子
let c = new Array(10, 20, 30, 40, 50, 60, 70, 80);
var b = c.filter(function(a) {
return (a % 20) - 10; // but if it is 9, it returns the whole list, it does not filter anything.
});
console.log(b); // [ 20, 40, 60, 80 ]
【问题讨论】:
-
0 是
falsy值-1不是。 -
负数计算为真。打开浏览器控制台,试试这个:
!!0和!!(-1) -
要明确一点,
!!是双重否定,当您使用!时,一旦您“否定”变量,将 true 更改为 false 并将 false 更改为 true。但是如果你做 2 次,你就会回到原来的值。问题是,如果原始值不是布尔值,对它取反两次将得到一个布尔值,因为否定接受多种类型的参数,但总是返回一个布尔值。 -
Flasy Values, @StackSlave 你能分享一下 -1 被认为是假值的文档吗?
标签: javascript arrays function lambda filter