Javascript isNaN 在作为参数传递时返回未定义
Javascript isNaN returning undefined when passed as argument
我正在自学Javascript,我有一个问题。
我创建了一个名为 "every" 的函数,它接受 2 个参数。
第一个参数是一个数组,第二个参数是一个布尔函数。
"every" 函数的作用是将布尔函数应用于数组中的每个元素,如果每个元素都 returns 为真,并且 "every" 函数 returns 为真,否则为假.
例如,
console.log(every([NaN, NaN, NaN], isNaN));
// → true
console.log(every([NaN, NaN, 4], isNaN));
// → false
我想出了一个解决方案,它奏效了。
function every(array, bool) {
for (var i = 0; i < array.length; i++) {
if (!bool(array[i]))
return false;
}
return true;
}
但是,我尝试将 forEach 合并到函数中并想出了这个
function every(array, bool) {
array.forEach(function(element) {
if(!bool(element))
return false;
});
return true;
}
但是第二个不行。我用 http://www.pythontutor.com/ 跟踪了每个执行步骤
并发现函数的 "bool(element)" 部分给我未定义而不是 true 或 false。
所以我的问题是为什么它给我未定义?因为在这种情况下 bool(element) 应该与 isNaN(element) 相同。
.forEach()
版本 returns 中的 return
语句来自 .forEach()
回调,而不是来自您的封闭函数。
您的应用程序并不是 .forEach()
的好用例。您真的不想为数组中的 each 元素执行函数:您只想处理数组直到第一个 false
元素。 Array 原型已经有一个 .every()
,所以你可以使用它,但是你的函数的整个点都会有问题:)
我正在自学Javascript,我有一个问题。
我创建了一个名为 "every" 的函数,它接受 2 个参数。 第一个参数是一个数组,第二个参数是一个布尔函数。 "every" 函数的作用是将布尔函数应用于数组中的每个元素,如果每个元素都 returns 为真,并且 "every" 函数 returns 为真,否则为假.
例如,
console.log(every([NaN, NaN, NaN], isNaN));
// → true
console.log(every([NaN, NaN, 4], isNaN));
// → false
我想出了一个解决方案,它奏效了。
function every(array, bool) {
for (var i = 0; i < array.length; i++) {
if (!bool(array[i]))
return false;
}
return true;
}
但是,我尝试将 forEach 合并到函数中并想出了这个
function every(array, bool) {
array.forEach(function(element) {
if(!bool(element))
return false;
});
return true;
}
但是第二个不行。我用 http://www.pythontutor.com/ 跟踪了每个执行步骤 并发现函数的 "bool(element)" 部分给我未定义而不是 true 或 false。 所以我的问题是为什么它给我未定义?因为在这种情况下 bool(element) 应该与 isNaN(element) 相同。
.forEach()
版本 returns 中的 return
语句来自 .forEach()
回调,而不是来自您的封闭函数。
您的应用程序并不是 .forEach()
的好用例。您真的不想为数组中的 each 元素执行函数:您只想处理数组直到第一个 false
元素。 Array 原型已经有一个 .every()
,所以你可以使用它,但是你的函数的整个点都会有问题:)