具有类型检查的array.every()不能始终如一地工作

时间:2018-11-08 22:11:02

标签: javascript

我正在尝试将Array.every()typeof()一起使用,以查看至少一个元素是否具有非数字

下面是代码段

1。

[2, "text", 2].every(val => console.log(typeof val ==="number"));// returns true

2。

["two", "text", 2].every(val => console.log(typeof val ==="number")); //returns false

我期望上面的1和2返回false。我们是否知道为什么将number作为第一项会影响结果?有没有其他方法可以达到相同的结果

1 个答案:

答案 0 :(得分:1)

出现意外结果的原因是您在错误的位置登录。

如果数组中的所有元素都满足您提供的谓词(回调),则Array#every() method返回true。但是,对于您的代码,谓词将返回console.log的结果(未定义)。这意味着数组中的“每个”项都返回未定义,这反过来意味着every()的结果在两种情况下都是假的。

需要注意的是,控制台在计算表达式true时将打印falseconsole.log(typeof val ==="number"),因此请注意不要将此日志记录与{{1}的结果混淆}。

要解决这些预期结果,请尝试从every()回调中删除对console.log的调用,而像这样记录.every()的结果:

every()