当前位置: 首页 > 知识库问答 >
问题:

Javascript中的对象破坏-试图有意义

翟京
2023-03-14

可能是一个有点傻的问题,但我只是一个初学者,有些事情我正在努力正确理解。

当我们有这样的代码时:

const { userName } = await getUserProfile({ userId });

这里到底发生了什么?我们是否正在从getUserProfile对象中分解userName,以便能够访问该属性?userId是否意味着getUserProfile函数有一个参数,该参数是一个具有userId属性的对象?

对不起,如果这是一个太初学者的问题,但如果有人有时间向我解释,请真的很感激。

共有1个答案

叶谦
2023-03-14

我会说这个函数是这样的:

interface Options {
   userId: number;
}

interface ReturnItem {
  userName: string;
}

const getUserProfile = async (options: Options): Promise<ReturnItem> => {
  // make some request with the id
  const response = await axios.get(`/look/up/my/user/${options.userId}`);
  return response.data;
}

析构是基于函数中定义的类型的,因此,您只需将项从返回的对象中拉出来,而不是获取对象,因为类型定义了您可以期望接收的内容。

而不是执行以下操作:

const myId = 1;
const myResult = await getUserProfile({userId: myId});
console.log(myResult.userName);

你可以做:

const userId = 1;
const {userName} = await getUserProfile({userId});
console.log(userName);

另一个例子:

const myReturnData = {
  userName: 'Bjork'
};

现在可以通过以下方式访问用户名:

console.log(myReturnData.userName);

const {userName} = myReturnData;
console.log(userName);

析构是在对象中获取这些值并将它们分配给变量。

再远一点...

const myReturnData = {
  userName: 'Bjork',
  coolnessFactor: 10000
};

const {userName, coolnessFactor} = myReturnData;
console.log('My User is: ', userName);
console.log('and my Coolnessfactor is: ', coolnessFactor);
 类似资料:
  • 问题内容: 我在页面上添加了一个简单的文件,该文件在和原型中添加了一些非常普通的常见任务功能。 经过反复试验,我发现向,添加任何函数,无论其名称或功能如何都会导致jQuery中的Javascript错误: 罪魁祸首? 我在attr:function {}声明中得到的第1056行的错误: 显然G.replace是未定义的。 很明显,有些事情我只是没有用原型制作而已,但我很痛苦地未能弄清楚它是什么。

  • 问题内容: Internet Explorer 11(Windows 7构建)中的对象包含某些函数的字符串表示形式,而不是您期望的本机调用。 这只能用原始的JavaScript破坏,而JSFiddle这样的网站对此代码没有问题,但是我怀疑是因为有适当的polyfill对其进行了纠正。 以以下HTML页面代码为例: 这在我安装的所有浏览器(IE11除外)中都可以很好地工作。第一行’ SCRIPT50

  • 我编码了一个小脚本来制作一个小动画,但是当我在div上非常快地移动光标10次时,div也移动了10次。我做了一个全局var和一个if查询,但它不起作用。 代码: animon()函数被限定在onmouseover事件上,而animoff()函数被限定在onmouseout事件上。工作布尔值会检查div容器是否被移动。

  • 问题内容: 我想问一下在调试过程中是否有可能以更有意义的方式识别对象。例如现在在Flex Builder调试面板中,例如: 对象(@ 12131241241) 理想情况下,我想拥有Object(@“ field1:field2”)…可以做到这一点。我相信在Java中,可以通过重写给定类的toString方法来实现…。在as3中尝试相同,但没有用 问题答案: 这里没有直接回答您的问题,但是周围有许多

  • 问题内容: 我刚刚发现了chromestatus.com,在失去了一天的时间后,发现了以下功能条目: 映射:映射对象是简单的键/值映射。 那让我感到困惑。常规JavaScript对象是字典,那么它与字典有何不同?从概念上讲,它们是相同的(根据 Map和Dictionary之间的区别是什么?) chromestatus文档参考也无济于事: 映射对象是键/值对的集合,其中键和值都可以是任意ECMASc

  • 问题内容: 我知道Go中没有析构函数,因为从技术上讲没有类。这样,我用来执行与构造函数相同的功能。但是,有没有办法在终止的情况下创建某些东西来模仿析构函数,例如使用关闭文件?现在,我只是打电话给我,但这有点荒唐,我认为设计很差。正确的方法是什么? 问题答案: 在Go生态系统中,存在一种处理包装了宝贵(和/或外部)资源的对象的惯用语:一种专门用于释放该资源的特殊方法,通常通过该机制进行 显式 调用。