当前位置: 首页 > news >正文

9.15 ES6-展开运算符-新增数组字符串方法-字面量对象简写

展开运算符

展开运算符: … 三个连续的点具有两个含义:展开运算符(spread operator)和剩余运算符(rest operator)。

  1. 实现数组的深拷贝(只能有一层引用类型)
// 普通拷贝
let arr1 = [1,2,3];
let arr2 = [];
arr2[1] = 'hello';
console.log(arr1,arr2);
// 深拷贝【数组是单层数据,并且每个值都必须是基础数据类型】
let arr1 = [1,2,3];
let arr2 = [...arr1];  // 等价于:arr2 = [arr[0],arr[1],arr[2]]
arr2[1] = 'hello';
console.log(arr1,arr2);
  1. 向函数传递参数
let arr = [1,2,3];
function show(a,b,c){alert(a);alert(b);alert(c);
}
// show(1,2,3); // 正常调用
show(...arr); // 使用...arg调用
  1. 合并数组
let arr1=[1,2,3];
let arr2=[4,5,6];
let arr3=arr1.concat(arr2); // 使用concat拼接
// let arr3=[...arr1,...arr2]; // 使用rest参数
alert(arr3);
  1. 伪数组
let divList = document.querySelectorAll("div");
// ES5
// for (var i = 0; i < divList.length; i++){
//     console.log(divList[i].innerHTML);
// }
let targetDom = [...divList].filter(el => {console.log(el);
})
  1. 与解构赋值一起使用
let [a, ...rest] = [9, 5, 2, 7];
console.log(a, rest);
  1. 函数嵌套中使用传递参数
function show(...args){fn(...args);
}
function fn(a,b){alert(a+b)
}
show(12,5);
  1. 对象中使用
let person = {name:'jack',age:18,sex:'男'};
console.log({...person}); // 可以获取;使用字面量的形式复制一个对象并输出(使用展开运算符创建字面量对象)
  1. 可以在min和max中获取最大值
let arr = [10,50,12,45,67,2];
console.log(Math.min(...arr)); // 最小值
console.log(Math.max(...arr)); // 最小值

字符串的扩展

  1. 字符串模板。【${}】
// 自定义背景颜色
let r = 255, g = 255, b = 0;
// 原来的操作
document.body.style.background = 'rgb('+r+','+g+','+b+')';
// 现在的操作
document.body.style.background = `rgb(${r}, ${g}, ${b})`;
// 输出小明的身高,体重,和BMI值
let weight = 75;
let height = 1.75;
// 体重(千克)/身高(米)的平方即kg/m2
console.log(小明的身高是${weight},体重是${height},BMI值为${parseInt(weight/(height*height))});
  1. includes(str[, index])

  2. startsWith(str[, index])

  3. endWidth(str[, index])

  4. repeat(n): 让字符串重复几次

  5. padStart(num[, str])

  6. padEnd(num[, str])

  7. trimStart()

  8. trimEnd()

  9. trim()

S5新特性

ES5中新增了一些好用的数组方法:forEach ,map ,filter ,some ,every ,reduce (除了forEach,其他都有回调,都有return)

面试题:ES5中常见的数组方法有哪些?

let data = {code: 1,list: [{id: 23,title: "女装1",price: 300}, {id: 24,title: "女装2",price: 200}, {id: 27,title: "男装1",price: 100}, {id: 29,title: "男装2",price: 400}, {id: 230,title: "女装3",price: 600}, {id: 40,title: "童装1",price: 700}]
}
  1. forEach (循环迭代)
    forEach(f(item[,index]){})语法

f:是回调函数
item:数组中的每一个值
index:表示下标值 没有return返回值

var arr = [1,2,3,4,5,6];
arr.forEach(function(item,index){if(item%2==0){console.log(item);}
})

map(映射): 遍历数据并返回一个新的数组,对数据的处理会返回原先对应的位置 需求:所有产品的价格都打5折

let newData = data.list.map((item, index) => {return {id: item.id,title: item.title,price: item.price * 0.6}
})
console.log(newData);

filter(过滤) 返回符合条件的记录 return true,则把当前记录存入新数组,否则不存

let newData = data.list.filter((item, index) => {return item.price > 400
})
console.log(newData);

reduce(减少,汇总) 常用来实现累加

// let arr = [300, 600, 200, 100]
// 首次调用时,sum是第一个元素,val是第二个元素,index是1
// 再次调用时,sum是上一次return的结果,val依次是下一个元素
let result = arr.reduce((sum, val, index) => {// console.log(sum, val, index);return sum + val;
})
console.log(result);
// 第二个参数是sum的初值, 则第一次调用 时, val是第一个元素
let result = data.list.reduce((sum, val, index) => {return sum + val.price;
}, 0)
console.log(result);
// 使用技巧
// 可以给reduce添加初始值
arr.reduce(()=>{},startVal);
var sum = 100;
let score = [1,2,3];
let sum = score.reduce((count,item,index)=>{return count + item
},0);
console.log(sum);
// 案例:购买data数据中价格 > 300的商品,并计算总价
let res = data.list.filter(item=>{return item.price > 300;
}).reduce((count,item)=>{return count + item.price;
},0)
console.log(res);
  1. some 如果有符合条件的记录,则返回真,否则返回假 遍历数组的每一项,有一个返回true,就停止循环
let newData = data.list.some((item, index) => {console.log(index);return item.price == 400
})
console.log(newData);
  1. every 如果每一个都符合条件,则返回真,否则返回假

  2. 遍历数组,每一项都是true,则返回true,只要有一个是false,就返回false

let newData = data.list.every((item, index) => {console.log(index);return item.price > 600
})
console.log(newData);

ES5新增数组方法面试题:

/*
使用map,filter函数完成需求; 筛选一个全数字数组中符合 3n-2(对3取余,余数是2的)的数字,并返回他们的平方;比如:[1,2,5,7] => [4,25]
*/
let arr = [34,25,67,45,82,12,98,11];

ES6新特性

变量声明:const和let
解构赋值
箭头函数
模板字符串
默认参数、剩余参数和展开运算符
类和继承
Promise
模块化
迭代器和生成器
Map和Set

ES7新特性

Array.prototype.includes()方法
求幂运算符 **

ES8新特性

Async/Await
Object.values(),Object.entries()
String padStart

ES9新特性

for — of遍历
Promise.prototype.finally()

ES10新特性

Array.prototype.flat()
Array.prototype.flatMap()
Object.fromEntries()
String.trimStart 和 String.trimEnd
try…catch

自面量对象的简写

在ES6中,如果键和值相同,则可以省略不写

let age = 20,name = 'Alice';
// ES5: 定义对象字面量
let obj = {age: age,name: name,say: function() {console.log(1);}
}
// ES6: 定义对象字面量
let obj = {age,name,say() {console.log(1);}
}
console.log(obj.name)
obj.say();

思考:for,for-in,forEach,for-of几种遍历方式的区别?
链接: https://pan.baidu.com/s/11vSmgRqNK1drY_9dPdSvUQ?pwd=gyrv 提取码: gyrv --来自百度网盘超级会员v5的分享


文章转载自:

http://BfpKqMcD.wqcbr.cn
http://FDgCFKYy.wqcbr.cn
http://Drw33iyP.wqcbr.cn
http://6TcTsZv1.wqcbr.cn
http://JDkeecKh.wqcbr.cn
http://vBv3dtUn.wqcbr.cn
http://h9qpXr3e.wqcbr.cn
http://vp6w88aZ.wqcbr.cn
http://zDJQ2Z2E.wqcbr.cn
http://TPR6JpJi.wqcbr.cn
http://95mK5UpW.wqcbr.cn
http://gqQYz88J.wqcbr.cn
http://asitQP69.wqcbr.cn
http://gG4cDbMA.wqcbr.cn
http://6zQeTBjR.wqcbr.cn
http://PCEVfcv9.wqcbr.cn
http://AxVLK0Wf.wqcbr.cn
http://UwEjAi0d.wqcbr.cn
http://3S4CV6SY.wqcbr.cn
http://WgdNhxgc.wqcbr.cn
http://Wl3VXI4X.wqcbr.cn
http://5tYsSEjF.wqcbr.cn
http://SDfJFB1N.wqcbr.cn
http://IC7IMhcS.wqcbr.cn
http://I0Iqck94.wqcbr.cn
http://tGUxbY1u.wqcbr.cn
http://gntD6Bgi.wqcbr.cn
http://l2L6Gvnt.wqcbr.cn
http://A6qr8Jur.wqcbr.cn
http://PxqjuNDv.wqcbr.cn
http://www.dtcms.com/a/385158.html

相关文章:

  • 架构师成长之路-架构方法论
  • 【CTF-WEB】表单提交(特殊参数:?url=%80和?url=@)(通过GBK编码绕过实现文件包含读取flag)
  • Java快速入门基础1
  • 嵌入式跟踪宏单元ETM(Embedded Trace Macrocell)
  • [免费]基于Python的Django商品二手交易平台【论文+源码+SQL脚本】
  • 「Memene 摸鱼日报 2025.9.15」Gemini 应用在美国 iOS 下载量超越 ChatGPT,西湖大学推出 AI 审稿系统
  • 并发和并行区别
  • RabbitMQ 内存管理与性能优化
  • VSCode关闭C或C++项目启动时的自动cmake功能
  • Git 查看状态(git status)、查看提交记录(git log)和提交日志(git reflog)
  • 第五届长城杯(京津冀蒙版)WEB
  • N1 junior 2025 safenotes
  • 2025年09月15日Github流行趋势
  • 通过网络强化增强混合IT环境的安全
  • 【数据结构入门】排序算法(5):计数排序
  • 超大规模多模态交通数据集:320TB+海量数据资源,涵盖行车视频、无人机航拍、第一视角步行骑行与道路监控,助力自动驾驶与智慧交通算法突破
  • [数据结构——Lesson13.冒泡与选择排序]
  • tar-符号连接(软连接)
  • php学习 (第六天)
  • MTK Linux Charger驱动分析(二) - power_supply_core.c
  • 如何做好AI智能体
  • 邻接矩阵幂 A^m 的几何意义
  • PL3381T/PL3383T/PL3384T 12V非隔离降压型芯片(200/300/400mA)
  • 食品科技企业NotCo完成SAP系统升级 构建统一数字化平台
  • LinuxC++项目开发日志——高并发内存池(6-内存回收机制)
  • 数值计算2
  • 硬件 - oring多电源切换
  • RocketMQ-高性能消息中间件的原理
  • DevOps历程--GitLab安装与使用教程(Docker安装和编译安装两种方式)
  • 大屏可视化动图渲染