javascript - JavaScript find(),传递{}和不带{}有什么区别?
问题描述
我有以下示例。两个 find() 函数都有效,但我不确定第一个带有 {} 的函数是如何传递给回调函数的。
1.如果使用{},我假设将一个对象传递给find函数,但是'title'作为一个对象如何用于与values进行比较(1.2)。有人可以解释一下基础知识,参考会更好。
2.我知道第二个find函数是传入对象,而arr.title是指对象'array1'中的值。我是对的?
const array1 = [{name:1,title:1.1}, {name:2,title:1.2}];
const found = array1.find(({title}) => title ==1.2);
const found2 = array1.find(arr => arr.title ==1.2);
console.log(found);
console.log(found2);
上面代码的结果是:
> Object { name: 2, title: 1.2 }
> Object { name: 2, title: 1.2 }
解决方案
这与 JavaScript 函数参数语法无关,Array.prototype.find
而是一个一般特征。
可以使用对象或数组解构语法定义函数参数。
函数定义
function f(x) {
return x.p;
}
声明一个函数,该函数接受一个名为 x 的清单参数。
行为相同的功能
function f({p}) {
return p;
}
声明一个匿名的清单参数,并提取其 p 属性。
从调用者的角度来看,这两个函数的行为是相同的,如果传递的第一个参数是未定义的,两个函数都将抛出,如果 x 没有 ap 属性,则两者都将返回 undefined,依此类推。
第二种形式纯粹是在函数实现中使用的一种语法便利,用于提取名为 p 的属性并在没有限制的情况下使用它。
参数解构是JavaScript 通用解构语法的一个实例,它还有其他应用,包括变量声明、赋值和提供默认值。
推荐阅读
- angular - 当您使用 jhipster --skipserver 选项时,您可以使用哪些不同的选项进行身份验证
- ios - GLM 数学库是否与 Apple 的金属着色语言兼容?
- java - Firestore在recycleview中检索具有限制的文档
- azure-data-lake - 在 Azure Databricks 中的日期范围之间读取镶木地板文件的有效方法
- kdb - KDB - 使用时间戳将列映射到表
- arrays - 如何将一组工作表名称输入 VBA Sheets.Copy?
- api - 双向API?
- amazon-redshift - 如何授予用户访问 Redshift 中特定模式中的一个表的权限
- wordpress - DOMPDF 字体错误:第 105 行的 src/Renderer/Text.php
- angular - Angular 7:Jquery 和 Bootstrap 不起作用