js 扩展运算符你研究了吗?

今天看Es6的新特性,看到这个扩展运算,突然想试一试将数组展开后,放到对象中,因为数组展开后他只有单个值,但是在对象中都是键值对存在,就在想数组展开放在对象中是啥样的,果然值的研究,虽然我觉得没啥用,可能是我没有应用场景,事物存在定有道理。

扩展运算符

【 … 】扩展运算符能将 数组 转换为逗号分割的 参数序列

运算完之后它不能直接暴露在外边,必须使用数组,对象进行包裹,

或者直接console.log() 输出它

const arr2 = [1,2,3]
console.log(...arr)  // 输出结果为,1,2,3

将两个数组进行合并:

const arr1 = [1,2,3]
const arr2 = [4,5,6]
// 1\arr1 展开后是 1,2,3
// 2\arr2 展开后是 4,5,6
// 3\...arr1,...arr2  就是1,2,3,4,5,6
// 4\使用一个中括号将他们两个包裹起来就是一个新的数组,也就是所说的数组合并了, 如下代码
let newarr = [...arr1,...arr2]
console.log(newarr)// 输出结果为:[1,2,3,4,5,6]

直接使用console输出和使用 [] 包裹起来也说了,那么使用对象的形式将展开的元素包裹起来会是什么样的呢?

使用对象将其包裹或许没什么用处,但是得知道他的原理

演示:

// 首先声明一个数组
let arr = [1,2,3]
// 在声明一个字面量对象,将数组使用展开运算符放入对象中
let obj = {
    ...arr
}
// 此时输出obj 对象
console.log(obj)
// 输出结果为:
// { '0': 1, '1': 2, '2': 3 }

结论:

当使用对象将使用展开运算符的数组包裹以后,数组的索引值会变成对象中的键名,和数组中的每个元素形成键值对的形式,存放在所在对象中(仅能在字面量对象使用)

论证一下上个结论:

这次我们声明两个数组将他们两个都放到一个对象当中,使用展开运算符将他们两个展开

let arr1 = [1,2,3]
let arr2 = [4,5,6]
let obj = {
    ...arr1,
    ...arr2
}
console.log(obj)
// 输出结果为 { '0': 4, '1': 5, '2': 6 }

因为数组展开之后,数组索引就成了他的键,第一个数组,和第二个数组索引都是从0开始的,第一个的数组展开后变成了{ ‘0’: 1, ‘1’: 2, ‘2’: 3},第二个数组展开后是:{ ‘0’: 4, ‘1’: 5, ‘2’: 6 },第二个数组放进对象后他们的键名(索引)跟第一个数组重复了,所以第二个数组就会覆盖掉第一个数组,所以结果为 { ‘0’: 4, ‘1’: 5, ‘2’: 6 }

进一步论证:

let arr1 = [1,2,3,7]
let arr2 = [4,5,6]
let obj = {
    ...arr1,
    ...arr2
}
console.log(obj)
// 输出结果为 { '0': 4, '1': 5, '2': 6 , '3': 7}

在第一个数组中多加一个值,这次7这个数索引为3,他在对象的键名为‘3’,而第二个数组中没有索引为3的值,所以没有被覆盖掉。

这样就验证了,数组展开放到对象中后,每个元素索引会变成他的键名

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

要爆炸的臭臭君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值