解构赋值
时间:2020-03-24
本文章向大家介绍解构赋值,主要包括解构赋值使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
解构赋值
数组的解构赋值
-
只要等号两边的模式相同,左边的变量就会被赋予对应的值
let [x, y, z] = [1, 2, 3]
let [a, [[b], c]] = [1, [[2] ,3]] -
如果解构不成功,变量的值就为
undefined
-
等号左边的模式,只匹配一部分的等号右边的数组。这种情况下,解构依然可以成功。称为不完全解构
let [a, b] = [1, 2, 3]
a//1
b//2 -
如果等号右边的不是数组,将会报错
-
只要某种数据结构具有Iterator接口,都可以采用数组形式的解构
默认值
-
允许指定默认值
let [foo = true] = []//foo:true
let [a, b = 2] = [1]//a:1,b:2
let [a, b = a] = [1, undefined]//a:1,b:1 -
只有当一个数组成员严格等于
undefined
,默认值才会生效let [x = 1] = [null]
//此时x等于null -
如果默认值是一个表达式,则此表达式是惰性求值的
function f(){
return 1;
}
let [x = f()] = [2]//x:2 不会执行函数f
对象的解构赋值
-
因为对象的属性没有次序,所以变量必须与属性同名,才能取到正确的值
let {foo, message} = {foo: '111', message: 222};
let {ashen, xing} = {xing: 23, ashen: 20}; -
如果解构失败,变量的值等于
undefined
-
对象的解构赋值可以取到继承的属性
const obj1 = {};
const obj2 = { foo : 'bar' };
Object.setPrototypeOf(obj1,obj2);
const { foo } = obj1;
//此时虽然obj1没有foo属性,但其原型对象是obj2,继承了其属性,所以解构赋值成功
注意
-
在将一个已经声明了的变量进行解构赋值时,大括号不能写在行首,否则会被js解析成块级作用域,出现语法错误
-
应该用
()
将解构赋值包裹起来
let x;
{x} = {x:1} //报错
({x} = {x:1}) //不报错 -
-
解构赋值允许等号左边的模式中不放置任何变量名,虽然无意义,但合法。
-
由于数组本质是特殊的对象,隐藏可以对数组进行对象属性的解构
let arr = [1, 2, 3]
let { 0 : first, [arr.length - 1] : last} = arr
//键值为0的值是1,first:1
//键值为2的值为3,last:3
数值和布尔值的解构赋值
-
如果等号右边不是数组或对象,则会先转换为对象
let {toString: s} = 123;
//123转为对象后:Number 具有toString方法,所以s为true
let {toString: s} = true;
//true转为对象后:Boolean 具有toString方法,所以s为true -
由于
undefined
和null
无法转换为对象,所以解构赋值报错
原文地址:https://www.cnblogs.com/ashen1999/p/12559767.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- php引用和拷贝的区别知识点总结
- PHP 观察者模式深入理解与应用分析
- php依赖注入知识点详解
- php策略模式简单示例分析【区别于工厂模式】
- php连接sftp的作用以及实例代码
- redis+php实现微博(一)注册与登录功能详解
- PHP序列化的四种实现办法与横向对比
- php设计模式之观察者模式定义与用法经典示例
- Laravel获取所有的数据库表及结构的方法
- redis+php实现微博(二)发布与关注功能详解
- PHP实现小程序批量通知推送
- Thinkphp5.0 框架Model模型简单用法分析
- php设计模式之单例模式用法经典示例分析
- PHP实现统计代码行数小工具
- redis+php实现微博(三)微博列表功能详解