es6 浅解“解构”

先上一段代码,
{    function move({x: t = 0, y = 0, z = 3} = ‘111‘) {        return [x="x",t, y, 9, z];    }

console.log(move({x: 3, y: 8, z: 5})); // ["x",3, 8, 9, 5]    console.log(move({x: 3})); // ["x",3, 0, 9 ,3]    console.log(move({})); // ["x",0, 0, 9, 3]    console.log(move()); // ["x",0, 0, 9 ,3]

let [a, ...b] = move({x: 4});    console.log(a);//x    console.log(b);//[4,0,9,3]}
如果能弄懂这个代码,基本了解到解构的精髓了。知识点1:数组的解构下标取值let [a,b]=[3,4];//a=3,b=4等价于let c=[3,4];let a=c[0];let b=c[1];

赋默认值let [a=1,b]=[,4];//a=1,b=4等价于let c=[undefined,4];let a,b=c[1];if(c[0]===undefined){  a=1;}注意:let [a=1,b]=[null,4];//a=null,b=4,只有c[0]为undefined未定义才赋默认值其他let [a,...b]=[1,2,3,4];//a:1,b:[2,3,4]let [a,,b]=[1,2,3];//a:1,b:3let [a,[b],c]=[1,[2,3],4];//a:1,b:2,c:4
报错let [a]=1;//报错let [a]=false;//报错let [a]=NaN;//报错let [a]=undefined;//报错let [a]=null;//报错let [a]={};//报错

对象解构let {a,b}={a:1,b:2};//a=1,b=2相当于let c={a:1,b:2};let a=c.a;let b=c.b;另let {b,a}={a:1,b:2};//a=1,b=2,没有排序要求

let {a:t,b}={a:1,b:2};//t=1,b=2相当于let c={a:1,b:2};let t=c.a;let b=c.b;*a为匹配模式,t为变量名称.

let {a:{b:{c},d:h,b},g:t}={a:{b:{c:1},d:2},f:3,g:4}//c=1,t=4,h=2,b={c:1};相当于let o={a:{b:{c:1},d:2},f:3,g:4};let c=o.a.b.c;let h=o.a.d;let b=o.a.b;let t=a.g;

*多重嵌套,规则一样"冒号前为匹配模式,冒号后为变量名"

let a;({a}={a:3});*必须加括号,因为每一行的首个字符如果为{,会被解析为块级作用域
let a={},b=[];({c:a.pro,d:b[0],e:b[1]=4}={c:2,d:3});//a={pro:2},b=[3,4];相当于let a={},b=[],f={c:2,d:3};a.pro=f.c;b[0]=f.d;b[1]=f.e;if(b[1]===undefined){  b[1]=4;}

let {0:a,1:b}=[3,4]//a=3,b=4*数组是特殊的对象

分析文章开始的move函数
function move({x: t = 0, y = 0, z = 3} = ‘111‘) {   return [x="x",t, y, 9, z];}等价于
function move(a){  if(a===undefined) a=‘111‘;  let t=a.x, y=a.y, z=a.z, x;  if(t===undefined) t=0;  if(y===undefined) y=0;  if(z===undefined) z=3;  if(x===undefined) x=‘x‘;  return [x,t,y,9,z]}

想要学习完整详细的es6解构知识点或es6技术,推荐阮一峰老师的es6教程
				
时间: 2024-10-09 13:22:09

es6 浅解“解构”的相关文章

ES6浅谈--解构,字符串扩展

解构: 1.大括号在句首会被认为是代码块,通过加圆括号可以解决问题,但是在声明语句中不能加圆括号,只有在赋值语句的非模式部分可以. 2.数值和布尔值解构会先转换成对象,然后用其包装对象的toString方法取得值再赋值. 3.解构用途:交换变量值:函数返回多个值取值:参数定义:提取json数据:参数默认值:遍历map:模块方法. 字符串扩展: 1.大括号增加unicode范围识别,另外支持for of遍历字符串. 2.模板字符串可以用于输入html文本,用${}做变量识别,反引号用反斜杠转义,t

ES6函数参数解构

ES6函数参数解构 常规的JavaScript若要给函数传递的参数是一个对象,需要像下面这样来实现: function sayName(person) { if(Object.prototype.toString.call(person) == '[object Object]') { console.log( `${person.firstName} ${person.lastName}`); } } sayName({firstName: 'Stephen', lastName: 'Curr

ES6浅谈--const,数组解构

关于const: 1.const声明的基本类型的值不可重复声明,不可修改,声明之后需要初始化,声明存在暂时性死区,只在声明的块级作用域内有效. 2.const本质上确保的是变量的内存地址的数值不会被改动,所以对于基本类型的值来说,数值在栈中保存,不会被修改:但是对于对象来说,const声明的对象不可以被改变的是内存地址,数据存在堆中,是可以被修改的,如果想不被修改需要freeze. 3.冻结对象后不能新添加属性,但是还可以修改原有属性,所以需要彻底冻结所有属性. 4.浏览器环境下顶层对象和全局对

es6 变量的解构赋值

一.数组的解构赋值 数组解构赋值,索引很重要,即顺序很重要 1.解构[1,2,3] //把1,2,3分别赋值给a,b,c var [a,b,c]=[1,2,3]; console.log(a+' | '+b+' | '+c);//1 | 2 | 3 2.更复杂,更强大的赋值,解构[1,[2,3]] //把1,2,3分别赋值给a,b,c var [a,[b,c]]=[1,[2,3]]; console.log(a+' | '+b+' | '+c);//1 | 2 | 3 3.跳着赋值 //把1赋值

ES6新特性-------解构、参数、模块和记号(续)

六.解构 解构提供了一个方便的地从对象或数组中提取数据的方法,请看下面的例子: //ES6 let [x,y]=[1,2];//x=1,y=2 //ES5 var arr=[1,2]; var x=arr[0]; var y=arr[1]; 使用这个语法,可以一次性给多个变量赋值.一个很好的附加用处是可以很简单的交换变量值: let x=1,y=2; [x,y]=[y,x];x=2 y=1 解构也可以用于对象,注意对象中必须存在的对应的键: let obj={x:1,y:2}; let {x,y

ES6中的解构赋值

在解释什么是解构赋值前,我们先来看一下, ES5 中对变量的声明和赋值. var str = 'hello word'; 左边一个变量名,右边可以是字符串,数组或对象. ES6 中增加了一种更为便捷的赋值方式.称为 Destructuring .好像大家普遍翻译为解构.解构赋值允许我们将数组或对象的属性赋予给任何变量,该变量的定义语法与数组字面量或对象字面量很相似.举个例子可以直观的说明. let [speak, name] = ['hello', 'destructuring']; conso

ES6 - Note2:解构赋值

ES6的解构赋值就是利用模式匹配从按照一定模式的数组或者对象中提取值赋值给变量. 1.数组的解构赋值 在ES6以前,变量的赋值是直接指定的,以后可以这么来写,如下所示 let [a,b,c] = [1,2,3]; console.log(a,b,c) 1 2 3 解构赋值只要等号两边的模式一致,便可解析成功,如下所示 var [d,[f,g]] = [3,[4,5]]; console.log(d,f,g); 3 4 5 ----------------------------- var [,,

ES6 变量与解构(二)

一.变量的声明与使用 [测试示例需要在node环境中测试,浏览器环境下并不完全兼容ES6代码]ES6中可以使用 {} 来包含任意一段代码,被 {} 包裹的内容称为一个代码块(局部作用域) let关键字 [声明变量]特性:1.块级作用域    [局部作用于声明的代码块中]2.变量声明不会提升    [变量未声明前无法使用该变量]3.暂时性死区    [该变量声明前面的区域]4.不能重复声明    [同一代码块中不能重复声明同一变量] const关键字    [声明常量(一般用大写字母表示常量)]特

ES6数组的解构赋值( 下)

对象的解构赋值 对象的解构赋值跟数组的解构赋值很类似,我们来看一段小代码: var { a,b,c} = {"a":1,"b":2,"c":3}; console.log(a);//结果:a的值为1 console.log(b);//结果:b的值为2 console.log(c);//结果:c的值为3 这段例子的代码是不是跟数组的解构赋值很相似,只不过是数组换成了对象.但是两者有一个不同的地方,我们对上面的代码稍做修改: var { a,b,c