JavaScript解构赋值的实用技巧是什么(javascript,开发技术)

时间:2024-04-29 08:54:34 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

    JavaScript%E8%A7%A3%E6%9E%84%E8%B5%8B%E5%80%BC%E7%9A%84%E5%AE%9E%E7%94%A8%E6%8A%80%E5%B7%A7%E6%98%AF%E4%BB%80%E4%B9%88

为什么需要解构呢,先来看一个例子:

这样写也能实现预期效果,但是代码看起来比较冗余。并且,如果对象内部嵌套较深时,那么对象的访问链就会变得很长。虽然这并不是什么大问题,但是使用解构赋值会让代码变得更简单和易读。

下面就来看看什么是解构赋值。MDN 中对解构赋值的描述:

解构赋值语法是一种 Javascript 表达式。通过解构赋值, 可以将属性值从对象/数组中取出,赋值给其他变量。

实际上,结构赋值就是将复杂的结构分解为简单的部分。解构赋值语法可以用于变量声明或者变量赋值。除此之外,还可以使用嵌套的解构赋值语法来处理嵌套结构。

比如,对上面例子中的对象进行解构:

这样看起来是不是简洁多了。

根据MDN对解构赋值的定义,我们可以将解构赋值分为两大类:

对象解构

数组解构

下面就分别来看看这两种解构赋值。

对象解构又称为对象属性分配模式,它允许我们将对象的属性值分配给相应的变量。它有两种写法:

第一种(第3行)是对象解构的完整形式,对象的每个属性都将被分配一个变量,其中冒号前面的是源对象中的属性,冒号后面的是要赋值属性;

第二种(第5行)是对象解构的简写形式,对象的属性与要分配的属性一致时可以使用这种形式。

如果需要给已有变量赋值,就需要额外注意了:

这里需要注意,需要将赋值表达式使用括号括起来,如果省略,解构对象将被视为一个块语句,而块语句时不能放在赋值表达式左侧的。

当使用解构赋值时,可以给变量传递一个默认值:

这里我们给age分配了一个默认值,当对源对象上不存在age属性时,age就会被赋上默认值25,而不是undefined。

如果分配的对象属性为undefined,那么就会使用默认值:

在使用数组解构时,实际上会使用迭代器将所需要的值与结构源分开。因此,我们可以对可迭代值使用数组结构,包括字符串、数组、集合、函数映射、DOM元素。我们还可以将解构赋值与扩展运算符结合使用。

在数组的解构中,存储变量的数组中的每个变量都会映射到解构数组上相同索引处的相应项。

如果解构中某一项不需要,可以使用逗号操作符进行分隔:

与对象解构一样,可以使用数组解构为局部变量设置默认值:

如果变量已经存在,就可以这么写:

与对象解构不同的是,这里不需要括号将数组括起来。

如果给变量分配的值是undefined,那么就会使用默认值:

这里的默认值并不一定是一个固定值,它可以是一个计算属性:

如果我们想将数组中的一些元素分配给变量,而将数组中的其余项分配给特定的变量就可以这样做:

上面我们说的解构的知识普通的数组和对象。实际上,解构赋值可以用于嵌套数组和嵌套对象。比如,文章最开始的例子中,就是解构的嵌套对象:

再来看一个嵌套数组解构的例子:

可以对函数参数使用解构赋值:

可以对函数返回值使用解构赋值:

当我们需要循环中的对象键值时,也可以使用对象解构:

很多时候我们不知道对象属性的key,只有运行时才知道。比如有一个方法getStudentInfo,它以一个key为参数,并返回相应的属性值:

这里传递给getStudentInfo方法的参数是动态的,因此可以这样写:

需要注意,包裹key的方括号不能少,否则会出现undefined值。

数组结构一个很实用的功能就是实现交换局部变量。通常,我们会借助临时变量来实现变量的交换:

如果使用数组的解构赋值,就会变得很简单:

可以使用解构赋值和rest运算符来实现数组的拷贝:

为了防止从数组中取出一个值为undefined的对象,可以在表达式左边的数组中为任意对象预设默认值。

意思是:定义这个变量或者变量的值设置为undefined的时候,而null、''、false在变量解析的过程中都是有值得情况,所以我们默认赋值会不成功。

示例如下:

如果只是根据属性的存在与否来绑定默认值的时候,可以使用解构赋值。

本文:JavaScript解构赋值的实用技巧是什么的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Easycode自动化springboot中curd是怎么样的下一篇:

8 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18