携手创作,共同成长!这是我参与「日新计划 8 月更文挑战」的第26天,点击查看活动详情
大家好!我是前端爬楼工程师,一个野生程序员。好奇新技术,仰慕牛大佬。如果喜欢我的文章,可以关注➕点赞,为我注入能量,与我一同成长吧~
ES6
引入了一个新的语法特性:解构。
看个例子,手动赋值
function foo(){ return [1,2,3] } var tmp = foo(), a = tmp[0],b = tmp[1],c=tmp[2] console.log(a,b,c) // 1 2 3
类似地对象赋值这么做
function bar(){ return { x:4, y:5, z:6 } } var tmp = bar(), x = tmp.x, y = tmp.y, z = tmp.z console.log(x,y,z) // 4 5 6
有了用于数组解构和对象解构就很方便了
var [a, b, c] = foo() var {x:x, y:y, z:z} = bar() console.log(a,b,c) // 1 2 3 console.log(x,y,z) // 4 5 6
对象属性赋值模式
var {x, y, z} = bar() // 更简短
我们这个省略是省略掉了:x
还是x:
呢? 其实是省略掉了x:
, 从我们把属性赋值给非同名变量可以看出:
var {x:bam, y:baz, z:bap} = bar() console.log(bam, baz,bap) // 4 5 6 console.log(x,y,z) // ReferenceError
关于对象解构还有个细节,指定对象字面值的模式:
var X = 10, Y = 20 var o = {a: X, b:Y} console.log(o.a,o.b) // 10 20
在{a:X, b:Y}
中,我们知道a
是对象属性,而X
是要赋给它的值。这个语法模式是target:source
,或者也是property-alias:value
。和赋值模式一样都是target = source
。
但是在使用对象解构赋值的时候,把看起来对象字面知道语法放在=
运算符的左侧(反转了target = source
模式)
var {x:bam, y:baz, z:bap} = bar()
这里的语法模式是source:target
(value:variable-alias
)。x:bam
表示x
属性是源值,而bam
是要赋值的目标变量。
对象字面值是
target<---source
,而对象解构赋值是source--->target
var aa = 10, bb = 20 var o = {x:aa, y:bb} var {x:AA, y:BB} = o
这样看起来会更清晰。
重复赋值
var {a: X, a:Y} = {a:1} X; // 1 Y; // 1
部分赋值
var [, b] = foo() var {x, z} = bar()
rest/spread 赋值
var a = [2,3,4] var [b , ...c] = a b // 2 c // [3,4]
b
得到第一个值,c
收集了剩余的值组成一个数组
默认值赋值
var [a = 3] = [] a // 3
嵌套解构
var app = { model: { User: function(){} } } var {model: {User}} = app
解构参数
function foo([x, y]) { console.log(x, y) } foo([1,2]) // 1 2 foo([1]) //1 undefined foo([]) // undefined undefined
简洁属性和简洁方法
// 属性 var x = 2, y= 3 o = { x:x y:y } o = { x, y } // 方法 o = { x: function (){} y: function (){} } o = { x(){}, y(){} *foo(){} }
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)