Javascript 带有类型检查的array.every()不’;我不能始终如一地工作

Javascript 带有类型检查的array.every()不’;我不能始终如一地工作,javascript,Javascript,我正在尝试使用Array.each()和typeof()来查看是否至少有一个元素具有非数字 下面是代码片段 一, 二, 我希望上面的1和2返回false。我们是否知道为什么将编号作为第一项会影响结果?是否有不同的方法来实现相同的结果导致意外结果的原因是您登录到了错误的位置 如果数组中的所有元素都满足您提供的谓词(回调),则返回true。但是,在编写代码的情况下,谓词将返回console.log(未定义)的结果。这意味着数组中的“every”项返回未定义,这反过来意味着every()的结果在这两种

我正在尝试使用
Array.each()
typeof()
来查看是否至少有一个元素具有非数字

下面是代码片段

一,

二,


我希望上面的1和2返回false。我们是否知道为什么将
编号作为第一项会影响结果?是否有不同的方法来实现相同的结果

导致意外结果的原因是您登录到了错误的位置

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

需要注意的是,在计算表达式
console.log(typeof val==“number”)
时,控制台将打印
true
false
,因此请注意不要将此日志与
every()的结果混淆

要解决这些预期结果,请尝试从
.every()
回调中删除对
console.log的调用,改为记录
every()
的结果,如下所示:

console.log('Expect false表示混合值类型:',
[2,“文本”,2]。每(val=>(val的类型==“数字”))
);
console.log('expected false for mix of value type:',
[“2”,“text”,2]。每(val=>(val的类型==“number”))
);
console.log('Expect true for all number:',
[1,123,2]。每(val=>(val的类型==“number”))

);回调应该返回一个布尔值。您正在返回
console.log的返回值,它是
未定义的
。两者都返回
false
。发生的情况是,
。每个
在获得错误值时立即停止
undefined
falsy
,因此回调总是只针对数组中的第一个值执行。也就是说,它相当于1)
console.log(typeof 2==“number”)
和2)
console.log(typeof“two”==“number”)
。如果它检查数组中的每个元素,两个调用都会得到三个日志输出。是的,您确实会得到不同的输出,因为
console.log(typeof val==“number”)
只对每个数组的第一个元素运行,并且这些元素的类型不同。也许您可以解释OP为什么会看到他们得到的输出?@FelixKling感谢您的反馈!刚刚更新的答案:-)很好的答案!更让人困惑的是,console.log在每个数组中只被调用一次,因为您已经解释过(返回undefined只对代码进行一次计算,并确定每个数组都应该返回false),而且它可能看起来像是返回值。
[2, "text", 2].every(val => console.log(typeof val ==="number"));// returns true
["two", "text", 2].every(val => console.log(typeof val ==="number")); //returns false