ES6解构赋值,对象结构,数组结构,函数参数结构

简单对象 和 数组的结构赋值

如果解构不成功,变量的值就等于undefined

对象
var { foo, bar } = { foo: "aaa", bar: "bbb" };
 foo // "aaa" 
 bar // "bbb"
  • 对象的属性没有次序,变量必须与属性同名,才能取到正确的值。
var obj = { p: ['Hello', { y: 'World' } ] };
var { p: [x, { y }] } = obj; 
x // "Hello" 
y // "World"
p //is not defined

注意,这时p是模式,不是变量,因此不会被赋值。

结构别名

var { foo, bar } = { foo: "aaa", bar: "bbb" }; 
foo // "aaa" 
bar // "bbb"
// baz  为别名
var { foo: baz } = { foo: 'aaa', bar: 'bbb' };
 baz // "aaa"

结构别名应用场景,
在对接接口是后端需要的参数为 key value 的形式 这个时候可以使用对象简写的方式传递传递参数,写法简便优雅

const jonFunc = () => {
  return ['JavaScript', 'VUE', 'NodeJS']
}

let user = { name: '自夏', sex: '男', age: 18 }

const { name:UserName, sex, age, jon = jonFunc()} = user

 Ajax.post({UserName, sex, age, jon})
 
// 结构使用别名后应该使用别名,不应该使用原有的变量 否则会出错
// console.log(name, sex, age, jon,hobby); //name is not defined
console.log(UserName, sex, age, jon,hobby); // 自夏 男 18 [ 'JavaScript', 'VUE', 'NodeJS' ] 

注意,这时name是模式,不是变量,因此不会被赋值。

数组
 var [a, b, c] = [1, 2, 3];
a //1
b //2
c //3
  1. 这种写法属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值
  2. 数组的元素是按次序排列的,变量的取值由它的位置决定;
let [foo, [[bar], baz]] = [1, [[2], 3]];
foo // 1
bar // 2 
baz // 3
let [ , , third] = ["foo", "bar", "baz"]; 
third // "baz" 
let [x, , y] = [1, 2, 3]; 
x // 1
y // 3 
let [head, ...tail] = [1, 2, 3, 4];
 head // 1
 tail // [2, 3, 4] 
  let [x, y, ...z] = ['a']; 
  x // "a"
  y // undefined 
  z // []

在js 中 可以展开数据,也可以收集数据,如果用在收集数据 必须在末尾来收集,收集的数据格式为为数组

function max (a, ...b) {
  let m = [a, ...b]
  return Math.max(...m)
}

console.log(max(100, 400, 500));  // 500

解构赋值允许指定默认值。

ES6内部使用严格相等运算符= = =,判断一个位置是否有值。所以,如果一个数组成员不严格等于undefined,默认值是不会生效的

var [foo = true] = []; 
foo // true
var [x = 1] = [undefined];
x // 1
var [x = 1] = [null]; 
x // null

如果默认值是一个表达式,那么这个表达式是惰性求值的,即只有在用到的时候,才会求值。

const jonFunc = () => {
  return ['JavaScript', 'VUE', 'NodeJS']
}

let user = { name: '自夏', sex: '男', age: 18 }

const { name, sex, age, jon = jonFunc() } = user

console.log(name, sex, age, jon); //自夏 男 18 [ 'JavaScript', 'VUE', 'NodeJS' ]

应用场景
当登录用户没有绑定手机号时,此时需要用户的手机号,结构用户数据时发现没有,就去调用对应的方法去绑定手机号码

函数参数的解构赋值

let getName = ({ name, xh }) => {
  return `${name}我喜欢${xh}`
}
console.log(getName({ name: '自夏', xh: '喜欢喜欢'})); //自夏我喜欢喜欢喜欢

let getName = ({ name, xh } = inf) => {
  return `${name}我喜欢${xh}`
}
console.log(getName({ name: '自夏', xh: '喜欢喜欢'})); //自夏我喜欢喜欢喜欢

let getName = ({ name, xh,hobby = 'Nodejs' }) => `${name}我喜欢${xh},我的爱好${hobby}`
getName({ name: '自夏', xh: '喜欢喜欢'}) //自夏我喜欢喜欢喜欢,我的爱好Nodejs
getName({ name: '自夏', xh: '喜欢喜欢',hobby:'dene'}) //自夏我喜欢喜欢喜欢,我的爱好dene

let ArrayInfo = ([x,y])=>{
  return x+y
}
ArrayInfo([100,420]) // 520

Map结构

为什么是map结构? 应为Map 的存储格式是键和值 所以能够结构
如果对Map 和Set 数据结构不熟悉,前面文章有详细介绍Map 和Set

var map = new Map(); 
map.set('first', 'hello'); 
map.set('second', 'world'); 
for (let [key, value] of map) { 
console.log(key + " is " + value); 
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ES6解构赋值的好处有以下几点: 1. 简化代码:ES6解构赋值可以让我们更简洁地从数组对象中提取值,并将其赋给变量。这样可以减少冗余的代码,使代码更加简洁易读。 2. 提高可读性:通过使用解构赋值,我们可以清晰地表达出我们想要提取的值的含义,使代码更易于理解和维护。 3. 方便的交换变量值:使用解构赋值可以方便地交换两个变量的值,而不需要使用额外的中间变量。 4. 快速提取对象属性:解构赋值可以快速提取对象中的属性,并将其赋给变量。这样可以方便地访问和操作对象的属性。 5. 函数参数的灵活应用:解构赋值可以用于函数的参数中,可以方便地从传入的对象数组中提取所需的值,使函数的参数更加灵活。 6. 处理JSON数据:解构赋值可以方便地从JSON数据中提取所需的值,使得处理JSON数据更加方便快捷。 7. 支持默认值:解构赋值可以为变量设置默认值,当提取的值不存在时,可以使用默认值来代替,避免出现undefined的情况。 8. 多层嵌套解构:ES6解构赋值支持多层嵌套的解构,可以方便地从复杂的数据结构中提取所需的值。 9. 可以与扩展运算符结合使用:解构赋值可以与扩展运算符(...)结合使用,可以方便地提取数组对象中的部分值,并将其与其他值合并或进行其他操作。 总之,ES6解构赋值可以使我们的代码更加简洁、可读性更高,并且提供了更多的灵活性和便利性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值