网站首页 > 技术文章 正文
在js日常开发中,经常会看到(…)这样的符号,这里介绍一下它的含义和作用。
定义
扩展运算符(…)是ES6的用法,用于取出参数对象的所有可遍历属性,然后拷贝到当前对象之中。
基本用法
let people = {name: "张三",age: 18}
let someone = {...person}
someone //{name: "张三",age: 18}
特殊用法
数组
由于数组是特殊的对象,所以对象的扩展运算符也可以用于数组
let foo = {...['a', 'b', 'c']}
console.log(foo)
[object] {"0":"a","1":"b","2":"c"}
空对象
如果扩展运算符后面是一个空对象,则没有任何效果
let a = {...{}, a: 1}
console.log(a)
[object] {"a":1}
Int类型、Boolean类型、undefined、null
如果扩展运算符后面是上面这几种类型,都会返回一个空对象,因为它们没有自身属性。
// 等同于{...Object(1)}
let num = {...1}
console.log(num)
// 等同于{...Object(true)}
let boo = {...true}
console.log(boo)
?
// 等同于{...Object(undefined)}
let undef = {...undefined}
console.log(undef)
?
// 等同于{...Object(null)}
let nul = {...null}
console.log(null)
字符串
如果扩展运算符后面是字符串,它会自动转在一个类似数组的对象
let str = {...'hello'}
console.log(str)
[object] {"0":"h","1":"e","2":"l","3":"l","4":"o"}
对象的合并
let age = {age: 15}
let name = {'name': '张三'}
let person = {...age, ...name}
console.log(person)
[object] {"age":15,"name":"张三"}
注意事项
自定义的属性和拓展运算符对象里面属性的相同的时候:
1、自定义的属性在拓展运算符后面,则拓展运算符对象内部同名的属性将被覆盖掉
let person = {name: '张三', age: 15}
let someone = {...person, name: '李四', age:17}
console.log(someone)
[object] {"age":17,"name":"李四"}
2、自定义的属性在拓展运算符前面,则变成设置新对象默认属性值
let person = {name: '张三', age: 15}
let someone = { name: '李四', age:17,...person}
console.log(someone)
[object] {"age":15,"name":"张三"}
如若转载,请注明出处:开源字节 https://sourcebyte.vip/article/351.html
猜你喜欢
- 2024-10-16 JS中(a==1 && a==2 && a==3)可以在JavaScript中计算为“true”吗?
- 2024-10-16 JavaScript 的这个难点,毁掉了多少程序员
- 2024-10-16 前端开发之彻底搞懂this指向(前端this指向问题)
- 2024-10-16 JavaScript中的变量声明和作用域(一)
- 2024-10-16 Top 26 JavaScript面试问题和答案
- 2024-10-16 JS 经典实例知识点整理汇总【实践】
- 2024-10-16 苦恼于JavaScript中的reduce函数?五分钟讲透彻
- 2024-10-16 前端基础:JavaScript(前端基础题)
- 2024-10-16 一句话彻底理解JS中的回调(Callback)函数
- 2024-10-16 面试中被问到最多的 19 个 JavaScript 问题
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)