对象的解构赋值&函数参数的默认值

对象的结构赋值

对象的解构赋值用于从一个对象取值,相当于将目标对象自身的所有可遍历的(enumerable)、但尚未被读取的属性,分配到指定的对象上面。所有的键和它们的值,都会拷贝到新对象上面。

let {foo,bar} = {foo: 'aaa',bar: 'bbb'}
foo //bar
bar //bbb

实际上,对象的解构赋值是下边形式的简写:

let { foo: foo, bar: bar } = { foo: "aaa", bar: "bbb" }

对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。真正被赋值的是后者,而不是前者。

对象的解构用来指定默认值:

var {x=3} = {}
x //3
var {x,y=5} = {x:1}
x //1
y //5

函数的默认参数

设置默认参数,可以直接写在参数定义后边

function log(x, y = 'World') {
  console.log(x, y);
}

log('Hello') // Hello World
log('Hello', 'China') // Hello China
log('Hello', '') // Hello

与解构赋值结合使用:

最直接的例子:

function foo({x, y = 5}) {
  console.log(x, y);
}

foo({}) // undefined 5
foo({x: 1}) // 1 5
foo({x: 1, y: 2}) // 1 2
foo() // TypeError: Cannot read property 'x' of undefined

为了解决上边最后一个问题,我们可以这么做:

function foo({x, y = 5} = {}) {
  console.log(x, y);
}

foo() // undefined 5

再看一个例子

function fetch(url, { body = '', method = 'GET', headers = {} }) {
  console.log(method);
}

fetch('http://example.com', {})
// "GET"

fetch('http://example.com')
// 报错

改进,双重默认值

function fetch(url, { body = '', method = 'GET', headers = {} } = {}) {
  console.log(method);
}

fetch('http://example.com')
// "GET"
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.属性的简洁表示法 允许直接写入变量和函数 上面代码表明,ES6 允许在对象之中,直接写变量。这时,属性名为变量...
    雨飞飞雨阅读 1,170评论 0 3
  • 属性的简洁表示法 ES6允许直接写入变量和函数,作为对象的属性和方法。 上面代码表明,ES6允许在对象之中,直接写...
    oWSQo阅读 525评论 0 0
  • 1.数组的解构赋值 2.对象的解构赋值 3.字符串的解构赋值 4.数值和布尔值的解构赋值 5.函数参数的解构赋值 ...
    卞卞村长L阅读 926评论 0 0
  • 有些事情,真的只是你以为我知道,像是那些隐藏的小心思。像是你喜欢我,曾经。 椰子算不上优秀,至少肯定不是鹤立鸡群的...
    五可因阅读 557评论 1 21
  • 最近几虽然很热,但是内心也很温暖,每天都有有朋友给我介绍工作。也了解了很多的东西。 我特别喜欢音乐,最近几天都有去...
    何德胜觉悟阅读 195评论 3 0