es6 解构

对象解构

(一) 对象字面量的语法形式是在一个赋值操作符左边放置一个对象字面量

let data = {
    type: 'JSON',
    name: 'bottle',
}

let { type, name } = data;
console.log(type); // "JSON"
console.log(name); // "bottle"

(二) 给已经声明过的变量赋值:(一定要用一对小括号包裹解构赋值语句,JS引擎将一对开放的花括号视为一个代码块。语法规定,代码块语句不允许出现在赋值语句左侧,添加小括号后可以将块语句转化为一个表达式,从而实现整个解构赋值过程)

let data = {
    type: 'JSON',
    name: 'bottle',
}
type = "Literal",
name = 5;
// 使用解构来分配不同的值
({ type, name } = data);
console.log(type); // "JSON"
console.log(name); // "bottle"

(三) 默认值:使用解构赋值表达式时,如果指定的局部变量名称在对象中不存在,那么这个局部变量会被赋值为undefined。为此,我们可以为它指定一个默认值。

let data = {
    type: 'JSON',
    name: 'bottle',
}
let { type, name, value = true, size } = data;
console.log(value); // true
console.log(size); // undefined

(四) 为非同名局部变量赋值:如果希望使用不同命名的局部变量来存储对象属性的值,可以这样做:

let data = {
    type: 'JSON',
    name: 'bottle',
}
let { type: binType, name: binName } = data;
console.log(binType); // "JSON"
console.log(binName); // "bottle"

(五) 嵌套解构

let data = {
    type: {
        type1: 'JSON',
        type2: 'BIN',
    },
}
let {type: {type1,type2}} = data;
console.log(type1); // JSON
console.log(type2); // BIN

数组的解构

(一) 与对象解构的语法相比,数组解构就简单多了,它使用的是数组字面量,且解构操作全部在数组内完成,而不是像对象字面量语法一样使用对象的命名属性。

let colors = [ "red", "green", "blue" ];
let [ , , thirdColor ] = colors;
console.log(thirdColor); // "blue"

(二) 解构赋值:(不需要像对象解构一样加小括号)

let colors = [ "red", "green", "blue" ],
firstColor = "black",
secondColor = "purple";
[ firstColor, secondColor ] = colors;
console.log(firstColor); // "red"
console.log(secondColor); // "green"

(三) 使用解构实现变量交换

let a = 1,b = 2;
[ a, b ] = [ b, a ];
console.log(a); // 2
console.log(b); // 1

(四) 数组解构同样可以设置默认值

let colors = [ "red" ];
let [ firstColor, secondColor = "green" ] = colors;
console.log(firstColor); // "red"
console.log(secondColor); // "green"

(五) 不定参数 (...语法)

let colors = [ "red", "green", "blue" ];
let [ firstColor, ...restColors ] = colors;
console.log(restColors); // ["green","blue"]

(六) 数组的复制:

// es5 中可以使用 concat() 方法实现数组的克隆
var colors = ['red', 'green', 'blue'];
var cloneColors = colors.concat();
console.log(cloneColors);  // ["red", "green", "blue"]

// es6 中可以直接使用解构实现数组克隆
const [...cloneColors1] = colors; 
console.log(cloneColors1); // ["red", "green", "blue"]

concat(): 用于连接两个或多个数组。该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。当我们没有给他传参数时,就返回一个调用该函数的数组的副本,相当于克隆了该数组。

const arr = [0, 1, 2];
const arr1 = [3, 4, 5];
console.log(arr.concat(arr1)); // [0, 1, 2, 3, 4, 5]

字符串解构

字符串也可以解构赋值。这是因为,字符串被转换成了一个类似数组的对象。

const [a, b, c, d, e] = 'hello';
console.log(a,b,c,d,e);//  "h"、"e" 、"l"、"l"、"o"
const {length} = 'hello';
console.log(length);//5

数值和布尔值解构

解构赋值时,如果等号右边是数值,则会先转为 Number 对象。

let {toString:s1} = 123;
console.log(s1 === Number.prototype.toString);//true

解构赋值时,如果等号右边是布尔值,则会先转为 Boolean 对象。

let {toString:s2} = true;
console.log(s2 === Boolean.prototype.toString);//true

解构赋值的规则是,只要等号右边的值不是对象或数组,就先将其转为对象。由于undefined和null无法转为对象,所以对它们进行解构赋值,都会报错

let { prop: x } = undefined; // TypeError
let { prop: y } = null; // TypeError
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,009评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,808评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,891评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,283评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,285评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,409评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,809评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,487评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,680评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,499评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,548评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,268评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,815评论 3 304
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,872评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,102评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,683评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,253评论 2 341