📜  `var { ... } = ...` 语句中的大括号有什么用?(1)

📅  最后修改于: 2023-12-03 14:59:10.069000             🧑  作者: Mango

var { ... } = ... 语句中的大括号有什么用?

在 JavaScript 中,我们可以使用大括号进行对象字面量的定义,如下所示:

var person = { name: 'John', age: 32 };

这是非常常见的一种写法,但是在使用某些库或框架时,我们会遇到一种新的语法,即:

var { name, age } = person;

这两种写法看起来有些类似,但是有何不同呢?

使用大括号的目的:

当我们使用 var { ... } = ... 时,它的本质是从一个对象中提取值,并将这些值赋给对应的变量。这个过程叫作解构赋值。

对于上面的例子,我们可以将其改写成:

var name = person.name;
var age = person.age;

这个过程中,我们通过 person.nameperson.age 的方式获取了对象中的属性,并将这些值赋给了对应的变量。

而当我们使用 var { ... } = ... 语法时,我们可以更加简单地完成这个过程。

var { name, age } = person;

在这个语法中,我们直接从 person 对象中取出 nameage 属性,并分别赋值给相应的变量。这使得代码更加简洁易懂。

同时解构出多个属性:

在某些情况下,我们想从一个对象中同时取出多个属性。此时,我们只需要在花括号中列出需要取出的属性即可。

例如,我们可以像下面这样从 person 对象中同时取出 nameage 属性,并分别赋值给 firstNameyearsOld 变量。

var { name: firstName, age: yearsOld } = person;

上述语法中,花括号指定了需要解构的属性,而冒号表示需要将这个属性的值重新赋值给一个新的变量。

我们在 name 属性前添加了一个 firstName 变量,这意味着我们将从 person 对象中获取 name 属性的值,并将其赋给 firstName 变量。

同样的,我们在 age 属性前添加了一个 yearsOld 变量,这意味着我们将从 person 对象中获取 age 属性的值,并将其赋给 yearsOld 变量。

在函数中使用解构赋值:

在 JavaScript 函数中,我们可以使用解构赋值语法来取出传递给函数的对象参数中的值。这使得函数写法更加简洁明了。

例如,假设我们传递了一个包含 nameage 属性的对象给 sayHello 函数。

function sayHello(person) {
  console.log(`Hello ${person.name}, you are ${person.age} years old!`);
}

我们需要使用点号 . 语法在 person 对象上获取值,相当于给程序员带来了额外的工作。

然而,我们可以使用解构赋值语法来消除这个问题,使函数写法变得更加简洁。

function sayHello({ name, age }) {
  console.log(`Hello ${name}, you are ${age} years old!`);
}

这个语法中,我们直接从传递的 person 对象中解构出 nameage 属性,并将它们作为参数传递给函数。 在调用这个函数时,我们可以直接传递一个包含 nameage 属性的对象。

var person = { name: 'John', age: 32 };

sayHello(person);

这个函数将会输出 Hello John, you are 32 years old!

总之,解构赋值语法使代码更加简洁,并且可以更好地利用对象字面量和函数语法结构。