使用array.every()方法的JavaScript箭头函数中(x=>;x)的含义
正在查找关于这行代码的解释。我在一定程度上理解箭头的功能。此代码段/质询的目的是:;“给定任意数量的参数,如果没有任何参数是错误的,则返回true。”我见过这样的解决方案:使用array.every()方法的JavaScript箭头函数中(x=>;x)的含义,javascript,arrow-functions,Javascript,Arrow Functions,正在查找关于这行代码的解释。我在一定程度上理解箭头的功能。此代码段/质询的目的是:;“给定任意数量的参数,如果没有任何参数是错误的,则返回true。”我见过这样的解决方案: const nothingIsNothing = (...args) => args.every(x => x) 参数和预期结果的示例如下: nothingIsNothing(0, false, undefined, null) ➞ false nothingIsNothing(33, "Hello
const nothingIsNothing = (...args) => args.every(x => x)
参数和预期结果的示例如下:
nothingIsNothing(0, false, undefined, null) ➞ false
nothingIsNothing(33, "Hello", true, []) ➞ true
nothingIsNothing(true, false) ➞ false
我只是不明白部分
(x=>x)
如何计算为truthy或falsy。有人能解释一下这是怎么回事吗?我希望这是有意义的lol。谢谢 使用.every
,如果回调的任何返回值为false,则.every
的计算结果为false
,否则它的计算结果为true
。因此,x=>x
作为回调意味着:获取数组中的每个值并立即返回它。如果全部都是真实的,则整个。每个的计算结果都是true
,否则false
它的逻辑与此相同:
const nothingIsNothing = (...args) => {
for (const arg of args) {
if (!arg) return false;
}
return true;
};
或者,实现类似于的功能。每个您自己:
//不要在实际代码中这样做,这只是一个示例
Array.prototype.myEvery=函数(回调){
用于(本工程施工项目){
如果(!回调(项))返回false;
}
返回true;
};
log([1,2,3].myEvery(x=>x));
log([1,2,3,0].myEvery(x=>x))代码>它是一对事物的组合
Javascript隐式return
语句
getVal=a=>a代码>
与
function getVal(a) { return a }
每个web API方法都会运行,直到遇到falsy
(非false)值为止。下面是MDN的一段引文
every方法为每个函数执行一次提供的回调函数
元素出现在数组中,直到找到回调
返回一个伪值。如果找到这样的元素,则每个方法
立即返回false。否则,如果回调返回一个truthy
值,则每个元素都返回true
param=>param
与(param)=>{return param}
以下是JavaScript中的所有falsy值:
每个
的返回值的文档说明如下:
如果回调函数为每个数组返回truthy值,则为true
元素。否则,错误
所以像这样的东西是假的,因为不是所有的元素都是真实的
const x=['test',0,null,-0].every(el=>el);
控制台日志(x)根据every()
方法测试数组中的所有元素是否通过所提供函数实现的测试。如果回调函数为每个数组元素返回一个值,它将返回一个布尔值,即true
。否则,false
const nothingsnothing=(…args)=>args。每个(x=>x)
可以扩展为:
const nothingIsNothing = (...args) => args.every(function(x){
if(x)
return true
else
return false
})
这是另一个版本,它将帮助你更好地理解速记。将值x类型转换为布尔值,并返回true/false。
const nothingsnothing=(…args)=>args.every(布尔值)
log(nothingIsNothing(0,false,未定义,null))
log(nothingIsNothing(33,“Hello”,true,[])
在这里执行繁重的操作
every()方法测试数组中的所有元素是否通过
由提供的函数实现的测试。它返回一个布尔值
遵循ECMA-262第5个规范的PolyFil,假设Object和TypeError具有其原始值,并且callbackfn.call的计算结果为Function.prototype.call的原始值,很好地演示了内部行为:
Array.prototype.PolyFillEvery=函数(callbackfn,thisArg){
"严格使用",;
变量T,k;
if(this==null){
抛出新的TypeError('这是null或未定义');
}
//1.让O作为调用ToObject的结果,并传递this
//值作为参数。
var O=对象(此);
//2.让lenValue作为调用Get internal方法的结果
//带参数“length”的O。
//3.将len设为ToUint32(lenValue)。
var len=O.length>>>0;
//4.如果IsCallable(callbackfn)为false,则抛出TypeError异常。
if(typeof callbackfn!='function'&&Object.prototype.toString.call(callbackfn)!='[Object function]'){
抛出新的TypeError();
}
//5.如果提供了thisArg,则T为thisArg;否则T为未定义。
如果(arguments.length>1){
T=thisArg;
}
//6.设k为0。
k=0;
//7.当kx))//假的
log(arTruthy.PolyFillEvery(x=>x))//真的
log([true,false].PolyFillEvery(x=>x))//false
位于=>
右侧,是在箭头函数上没有{}
的情况下返回的值。您了解胖箭头和隐式返回吗?你明白吗