ES6学习复习系列文章目录ES6所有知识点学习复习文章链接地址ES6字符串和数字格式新添加的所有知识点(完整细节) ES6解构赋值)各种情况细节)深入了解ES函数默认值ES6的箭号函数应用和注意点ES6函数末尾调用末尾递归和优化ES6数组详细理解面ES6数组的常用展开方法es5的详细应用,6数组的空闲处理ES6构造赋值(详细理解各种情况)构造赋值可以应用于数组、对象、字符串等各个方面,非常常用。 我经常在函数的自变量和返回值中使用正文的内容
文章列表ES6学习复习系列文章列表ES6构造赋值(每种情况的细节)什么是解构造赋值数组(指定构造赋值解构造不成功不完全解构造许可默认值的对象的解构造赋值首先与亲属性一致,与子属性一致则继承的属性对象的解构造赋值赋值解结构的注意事项括号问题解结构赋值的一般应用场景(1)交换变量值;2 )函数返回多个值)函数参数的定义
什么是构造赋值
ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。所谓的解构就是解析解构的意思
数组的结构赋值
注意事项:
赋值等号左右侧的数组结构必须一直持续。 这被称为“模式匹配”。 如果左右变量数和数值数不一致,则直接跳过缺少的部分。 (另外,左侧的跳过也跳过右侧对应位置的。 如果左侧某个变量前面有三个小点,则表示右侧相应位置之后的所有数字都将合并为一个数组,并赋值给左侧的该变量。 如果左侧不是最后一个变量,则无法在前面添加三个点。 否则,即使报告错误,分析也不会成功。 **如果分析不成功,则相应变量的值等于undefined。
**
不完全解的另一种情况是不完全解,等号左边的模式只匹配某些等号右边的数组。 在这种情况下,解构仍然是成功的
如果等号右侧不是数组,或者严格来说不是可遍历的结构,则会报告错误。
上述语句均报告错误。 等号右侧的值是因为转换为对象后没有Iterator接口(前五个表达式),或者本身没有遍历接口(最后一个表达式)。
允许指定默认值
请注意,ES6内部使用严格相等的运算符来确定某个位置是否有值。 因此,只有当右侧的数组成员严格等于undefined时,默认值才有效。 因为如果使用具有两个等号的运算符,则会发生数据类型转换
在上面的代码中,如果数组成员为null,则不启用默认值。 因为空值不严格等于未定义。
默认值可以引用解构赋值的其他变量,但该变量必须已经声明
对象的构造赋值对象的构造与数组有重要的区别。 数组的元素按顺序排列,变量的取值由其位置决定; 对象的属性没有顺序,变量必须与属性同名才能获取正确的值。
与数组一样,解构也可以用于嵌套结构的对象。注意,这时p是模式,不是变量,因此不会被赋值
先匹配父属性,然后匹配子属性
上面的代码在分析时报告错误。 原因很简单,因为foo此时等于undefined,再加上子属性会报告错误。
可以获取继承的属性
对象赋值注意事项(1)将声明的变量用于赋值的构造时,必须非常小心。 左边代码的写法报告错误。 由于JavaScript引擎将{x}理解为代码块(最简单的块级范围),因此会发生语法错误。 要解决此问题,必须不在开头写大括号,并且不要将JavaScript解释为代码块。
)在构造赋值允许等号左边的模式中,不放置变量名。 因此,可以编写非常奇怪的赋值表达式。 上式没有意义,但语法是合法的,可以执行。
)3)数组的本质是特殊的对象,因此可以对数组进行对象属性的解释
字符串的解结构赋值字符串也可以进行解结构赋值。 这是因为此时字符串已转换为类似数组的对象。
由于类似数组的对象具有length属性,因此也可以解决此属性
数值和布尔值的解结构赋值解构赋值时,如果等号右边是数值和布尔值,则会先转为对象(临时的包装对象)
赋值规则为:它首先转换为对象,除非等号右侧的值是对象或数组。
因为undefined和null无法转换为对象,所以如果为它们分配构造值,则会报告错误。
函数参数赋值
函数参数的结构也可以使用默认值。 这里有两个步骤:
如果对函数中的参数进行构造赋值,则在调用{x=0,y=0}函数时传递数据,如果传递的参数可以正常进行构造赋值,则使用传递的参数,否则默认
赋值的注意事项解决括号问题引起的问题,在模式中
出现圆括号怎么处理。ES6 的规则是,只要有可能导致解构的歧义,就不得使用圆括号。但是,这条规则实际上不那么容易辨别,处理起来相当麻烦。因此,建议只要有可能,就不要在模式中放置圆括号。
上面 6 个语句都会报错,因为它们都是变量声明语句,模式不能使用圆括号。
函数参数
函数参数也属于变量声明,因此不能带有圆括号。
上面代码将整个模式放在圆括号之中,导致报错。
下面代码将一部分模式放在圆括号之中,导致报错。
可以使用圆括号的情况只有一种:赋值语句的非模式部分,可以使用圆括号。