gpt4 book ai didi

javascript - 为什么 Array.filter(Number) 在 JavaScript 中过滤掉零?

转载 作者:IT王子 更新时间:2023-10-29 03:07:48 26 4
gpt4 key购买 nike

我正在尝试从数组中过滤掉所有非数字元素。我们可以在使用 typeof 时看到所需的输出。但是对于 Number,它会过滤掉零。

示例如下(在 Chrome 控制台中测试):

[-1, 0, 1, 2, 3, 4, Number(0), '', 'test'].filter(Number)
// Which output with zero filtered out:
[-1, 1, 2, 3, 4] // 0 is filtered

如果我们使用 typeof,它不会过滤零,这是预期的。

// code
[-1, 0, 1, 2, 3, 4, Number(0), '', 'test'].filter(n => typeof n === 'number')
// output
[-1, 0, 1, 2, 3, 4, 0]

我的问题:

  1. 'Number' 和 'typeof' 方法有什么区别?

  2. 数字过滤器为零,但“数字”本身确实包含零,这让我很困惑。

最佳答案

因为 0 是众多 falsy 之一JavaScript 中的值

所有这些条件将被发送到else block :

if (false)
if (null)
if (undefined)
if (0)
if (NaN)
if ('')
if ("")
if (``)

来自Array.prototype.filter()文档:

filter() calls a provided callback function once for each element in an array, and constructs a new array of all the values for which callback returns a value that coerces to true

在您的例子中,回调函数是 Number。所以你的代码相当于:

[-1, 0, 1, 2, 3, 4, Number(0), '', 'test'].filter(a => Number(a)) 

// Number(0) -> 0
// Number(Number(0)) -> 0
// Number('') -> 0
// Number('test') -> NaN

filter 函数选择 truthy 时值(或强制为 true 的值),返回 0NaN 的项目将被忽略。因此,它返回 [-1, 1, 2, 3, 4]

关于javascript - 为什么 Array.filter(Number) 在 JavaScript 中过滤掉零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53920037/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com