【发布时间】:2021-05-09 23:54:21
【问题描述】:
不确定这是否真的是一个问题,但是当我在使用 Array.filter 时不小心没有使用相等检查时,我注意到了这一点。相反,当我觉得我应该因为不使用相等检查而收到某种错误时,它会映射我的数组:
const x = [{ name: 'user' }];
console.log(x.filter(x => x.name = 'another user'))
// Result:
// [{ name: 'another user' }]
这在任何地方都有记录吗?我觉得这不是故意的。我找不到任何关于 Array.filter 也能够映射的信息,所以我在这里问它。也许这属于github...
【问题讨论】:
-
错字?
x.name = 'another user'->x.name === 'another user'? -- 老实说,我写这篇文章的时候还没有读完这个问题…… -
不,因为这不是语法错误(您编写了有效代码),而是您的逻辑错误。如果您编写了有效代码,语言没有义务报告错误。
-
每个数组方法都会调用每个项目上提供的回调。您正在更新每个对象的
x.name = 'another user'。赋值表达式也返回another user作为它的值。那是一个truthy 值。因此,原始数组中的每个对象都包含在输出中并更新。
标签: javascript typescript ecmascript-6 filter