ES6-数组和对象的解构以及应用

本文详细介绍了ES6中新增的解构赋值功能,包括数组的顺序解构、剩余元素处理以及对象的属性解构、重命名和默认值设定。同时探讨了函数对象原型与Function的关系,展示了如何利用这些特性进行编程操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解构Destructuring
  • ES6中新增了一个从数组或对象中方便获取数据的方法,称之为解构Destructuring
    • 解构赋值 是一种特殊的语法,它使我们可以将数组或对象“拆包”至一系列变量中
  • 我们可以划分为:数组的解构和对象的解构
  • 数组的解构:
    • 基本解构过程
    • 顺序解构
    • 解构出数组:…语法
    • 默认值
  • 对象的解构:
    • 基本解构过程
    • 任意顺序
    • 重命名
    • 默认值
数组解构
var names = ["草莓","汤姆","班花姐姐","小满","超级满","挖机哥"]

//数组的解构(不使用解构方式)
// var name1 = names[0]
// var name2 = names[1]
// var name3 = names[2]
// var name4 = names[3]
// var name5 = names[4]
// var name6 = names[5]
//数组使用解构方式(会自动从头按顺序填入),[]是固定格式
var [name1,name2,name3,name4,name5,name6] = names
console.log(name1,name2,name3,name4,name5,name6);//草莓 汤姆 班花姐姐 小满 超级满 挖机哥

//顺序问题:严格的顺序(对于我们中间不想要的属性需要留出位置)
var [name1, ,name3, ,name5,name6] = names
console.log(name1,name3,name5,name6);//草莓 班花姐姐 超级满 挖机哥

//解构出数组(前面两个单独放,后面4个我希望放在一个数组里面),使用剩余
var [name1,name2,...newNames] = names
console.log(name1,name2,newNames);//草莓 汤姆 [ '班花姐姐', '小满', '超级满', '挖机哥' ]

//解构的默认值(如果数组里面有undefined,解构不出来的时候,可以给出默认值),测试不生效,这里我跟coderwhy的情况发生了不一致的情况,需要明确的在某一个内容上进行赋值默认值,比如现在下面是obj2为undefined,那就需要将默认值写在obj2那里
var obj = ["小满",undefined,"康老师"]
var [obj1,obj2="小余",obj3="default"] = obj
console.log(obj1,obj2,obj3);
对象解构
var obj = {name:"小余",age:18,height:1.75}
//对象的解构(不使用解构方式)
// var name = obj.name
// var age = obj.age
// var height = obj.height
//对象使用解构方式(基本使用),使用{}
var {name,age,height} = obj
console.log(name,age,height);//小余 18 1.75

//顺序问题:对象的解构是没有顺序的,根据key解构,也就是说解构的key是跟对象里面的键一一对应的。要是写错了,可就undefined了,不需要按顺序就意味着我们不用像数组解构那样要给中间不想要的属性留出空位了
var {age,height,name} = obj
console.log(age,height,name);//18 1.75 小余

//对变量进行重命名(这里对身高height部分进行重命名),然后我们在使用的时候,就可以使用新的命名了
var {age,height:xiaoyu_height,name} = obj
console.log(xiaoyu_height);//1.75

//默认值
var {
    name,
    age,
    height,
    address="福建"
} = obj

console.log(name,age,height,address);//小余 18 1.75 福建,我们对address设置了默认值为福建

(掌握)补充-函数对象的原型和Function的关系

//new Function()
//foo.__proto__ === Function.prototype
function foo(name,age){
    console.log(this,name,age);
}

//1.对象中的某些属性和方法是来自Function.prototype
//test.__proto__ === Function.prototype
function test(){}

//foo当作一个对象,获取apply方法
foo.call("abc",["小余",20])
console.log(Function.prototype.call);//ƒ call() { [native code] }
console.log(Function.prototype.apply);//ƒ apply() { [native code] },native意思为原生

//2.在Function.prototype中添加的属性和方法,可以被所有的函数获取
Function.prototype.info = "你好,小余"
console.log(test.info);//你好,小余
console.log(foo.info);//你好,小余

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值