前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ES6新增特性

ES6新增特性

作者头像
青梅煮码
发布于 2023-01-31 02:18:21
发布于 2023-01-31 02:18:21
75200
代码可运行
举报
文章被收录于专栏:青梅煮码青梅煮码
运行总次数:0
代码可运行

ECMAScript 6(ES6) 目前基本成为业界标准,它的普及速度比 ES5 要快很多,主要原因是现代浏览器对 ES6 的支持相当迅速,尤其是 Chrome 和 Firefox 浏览器,已经支持 ES6 中绝大多数的特性。

1.let 和 const


在ES6新特性中,增加的两个声明变量和常量的方法,let用于声明变量,const用于声明常量。

①在JS中是没有块级作用域的,而使用let就可以形成块级作用域:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
 var a = 1; 
 let b = 2; 
} 
console.log(a); //1 
console.log(b); //not defined

②let不会像var那样发生变量提升:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
console.log(a); // not defined
let a = 1;

③let不允许在相同块级作用域内,重复声明同一个变量:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//报错
{
 var a = 1;
 let a = 2;
}
// 报错
{
 let a = 1;
 let a = 2;
}

①const与let相同,只在所声明的块级作用域内有效。 ②const与let相同,也不能在同一个块级作用域声明同一个变量。 ③const用于声明常量,一旦声明 ,常量的值就不能改变。

2.箭头函数


在ES6新增的操作符 => ,用于简化函数的书写。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let f = function(){
 console.log("Hello Word!")
}
f( );
// 上述代码段可简写为:
let g = ()=>{
 console.log("Hello Word!")
}
g();
// 另外,若参数只有一个,()也可省略,若函数内只有一行语句,{}也可省略:
let a = 1;
let h = a => console.log(a);
h( );

需要注意的是:箭头函数没有绑定 this。

3.字符串模板


ES6中允许使用反引号 “ 来创建字符串,它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中使用${}嵌入变量。

最基础的用法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let a = 18;
console.log(`我今年${a}岁了`) // 我今年18岁了

模板字符串还可以拼接和插入表达式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let a = 18;
let b = 2;
console.log(`我今年${a + b}岁了`+``+`明年就会多一岁`+``); // 我今年20岁了,明年就会多一岁。

4.扩展运算符


扩展运算符用三个点号表示,功能是把数组或类数组对象展开成一系列用逗号隔开的值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let arr = [1, 2, 3];
let arr2 = [...arr,4,5,6]
console.log(arr2); // 1,2,3,4,5,6

更深层次的用法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let arr = [1, 2, 3];
//数组深拷贝
let arr2 = arr;
let arr3 = [...arr];
console.log(arr === arr2); //true, 说明arr和arr2指向同一个数组
console.log(arr === arr3); //false, 说明arr3和arr指向不同数组

//字符串转数组
let str = 'love';
let arr5 = [...str];
console.log(arr5); //[ 'l', 'o', 'v', 'e' ]

5.默认参数


ES6可以在定义函数的时候设置参数的默认值了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function sayHello(name = "xiaoer") { 
 //如果没有传这个参数,才会有默认值,
 console.log(`Hello ${name}`);
}

sayHello(); //输出:Hello xiaoer
sayHello("wangcai"); //输出:Hello wangcai

6.解构赋值


若一个函数要返回多个值,常规的做法是返回一个对象,将每个值做为这个对象的属性返回。在ES6中,利用解构这一特性,可以直接返回一个数组,数组中的值会自动被解析到对应接收该值的变量中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function f() {
 return [1, 2];
}
var [x, y] = f();
console.log('x:' + x + ', y:' + y); // x:1,y:2

不止函数的返回值可以使用解构赋值,数组、对象的赋值也可以使用解构赋值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let arr = [10, 20, 30, 40];
// 数组解构
let [one, two] = arr;
console.log(one, two); //10 ,20

let obj = {
 name: 'xiaoer',
 age: 18
}
let {name,age,sex} = obj;
// 解构出来的属性,如果不存在,默认值为undefined
console.log( name, age, sex ); //xiaoer 18 undefined

7.数组方法的扩展


伪静态方法

①Array.from() Array.from方法用于将两类对象转为真正的数组:类似数组的对象(array-like object arguments)和可遍历(iterable)的对象(包括ES6新增的数据结构Set和Map)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let arrLike = {
 0: 10,
 1: 20,
 2: 30,
 length: 3
}
let arr = Array.from(arrLike);
console.log(arr); //[10, 20, 30]

②Array.of() Array.of方法用于将一组值,转换为数组。 它弥补了使用new Array()构造数组的奇怪行为 。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let arr = new Array(3); // 原始方法,构建了一个有三个内容的空数组

let arr1 = Array.of(3);
let arr2 = Array.of(1, 2, 3);
let arr3 = Array.of();

console.log(arr1); //[3]
console.log(arr2); //[1, 2, 3]
console.log(arr3); //[]

数组操作

①内部拷贝copyWithin()

数组实例的copyWithin方法,在当前数组内部,将指定位置的成员复制到其他位置(会覆盖原有成员),然后返回当前数组。也就是说,使用这个方法,会修改当前数组。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let arr = [1, 2, 3, 4, 5, 6, 7, 8];
arr.copyWithin(1, 5, 8);
console.log(arr); //[1, 6, 7, 8, 5, 6, 7, 8]

第一个参数代表从这个位置开始替换,后两个参数代表要拷贝的起始位置和结束位置,不包含结束元素,左闭右开。可以使用负值代表倒数。

②查找find()与findIndex()

这两个原型方法都有一个回调函数作为参数,(回调函数的参数依次为元素、索引、数组引用),find()会返回第一个满足条件的元素,findIndex()会返回第一个满足条件的索引。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let arr = [10, 20, 30, 40, 50];
console.log(arr.find(function(value, index, arr){
 return value > 25;
}));// 30
console.log(arr.findIndex(function(value, index, arr){
 return value > 25;
}));// 2

③填充fill()

这个方法用于填充数组,会修改调用它的数组。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let arr = [1, 2, 3];
console.log(arr.fill(100)); //[100, 100, 100]

此外还可以指定填充的起始位置和终止位置,同样也是左开右闭。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let arr = [1, 2, 3, 4, 5];
console.log(arr.fill(100, 1, 4)); //[1, 100, 100, 100, 5]

④包含includes()

这个方法用于检测数组是否含有某个特定值,返回布尔值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let arr = [1, 'a', true, null, NaN];
console.log(arr.includes(1)); //true
console.log(arr.includes('a')); //true
console.log(arr.includes(true)); //true
console.log(arr.includes(null)); //true
console.log(arr.includes(NaN)); //true
console.log(arr.includes(undefined)); //false
console.log(arr.includes()); //false

8.创建类


我们知道,javascript不像java是面向对象编程的语言,而只可以说是基于对象编程的语言。所以在js中,我们通常都是用function和prototype来模拟类这个概念。

但是现在有了es6,我们可以像java那样创建一个类了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class NBAPlayer{
 constructor(name,age,height){
 this.name= name;
 this.age= age;
 this.height= height;
 }
 say(){
 console.log(`我是${this.name},我今年${this.age}岁,我身高${this.height}`)
 }
}
var p1 = new NBAPlayer("库里",30,191);
p1.say( ); // 我是库里,我今年30岁,我身高191

9.两种新的数据结构


ES6提供了新的数据结构Set。类似于数组,只不过其成员值都是唯一的,没有重复的值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var s = new Set();

// 通过add方法向Set结构中加入成员
[2, 3, 5, 4, 5, 2, 2].map(x => s.add(x))

for (i of s) { console.log(i) }
// 2 3 4 5 (表明set结构不会添加重复的值)

console.log(Array.isArray(s)); 
// false 表明 set 并不是真正的数组,而是一个伪数组

而Map类似于对象,也是键值对集合,但是”键”的范围不限于字符串,对象也可以当作键。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var m = new Map();
obj = {p: "hello world"};

m.set(obj, "content");
console.log( m.get(obj) ); // content

在上面的代码中,将对象obj当作m的一个键。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var map = new Map([["name", "小明"], ["title", "Author"]]);

map.size //2
map.has("name"); //true
map.get("name"); //小明
map.has("title"); //true
map.get("title"); //Author

Map还可以接收一个数组进行初始化。

10.字符串扩展


repeat

ES6为字符串添加了一个 repeat() 方法,它接受一个参数作为字符串的重复次数,返回一个将初始字符串重复指定次数的新字符串。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
console.log("x".repeat(3)); // "xxx"
console.log("hello".repeat(2)); // "hellohello"
console.log("abc".repeat(4)); // "abcabcabcabc"

trim

用于除去字符串中的空格。trim把左右的空格都除去,trimLeft除去左空格,trimRight除去右空格。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let str = " ab cd ";
str.trim(); // "ab cd"
str.trimLeft(); // "ab cd "
str.trimRight(); // " ab cd"

includes

该方法用于检测在字符串中是否存在所找的字符串,存在返回 true ,否则返回false

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let str = "abcd";
str.includes("a"); // true
str.includes("z"); // false

strartsWith

判断指定的子字符串是否出现在目标字符串的开头位置。第二个参数选填,表示开始搜索的位置。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let str = "abcd";
str.startsWith("a"); // true
str.startsWith("b"); // false
str.startsWith("b",2); // true,从第二个字符开始

endsWidth

判断子字符串是否出现在目标字符串的尾部位置。第二个参数选填,表示针对前N个字符。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let str = "abcd";
str.endsWith("d"); // true
str.endsWith("c"); // false
str.endsWith("c",3); // true,针对前三个字符

padStart

ES6 引入的字符串补全长度的功能。如果某个字符串不够指定长度,会在头部补全。 一共接受两个参数,第一个参数用来指定字符串的最小长度,第二个参数是用来补全字符串。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'x'.padStart(5, 'ab') // 'ababx'
'x'.padStart(4, 'ab') // 'abax'

padEnd

ES6 引入的字符串补全长度的功能。如果某个字符串不够指定长度,会在尾部补全。 一共接受两个参数,第一个参数用来指定字符串的最小长度,第二个参数是用来补全字符串。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'x'.padEnd(5, 'ab') // 'xabab'
'x'.padEnd(4, 'ab') // 'xaba'

padStart和padEnd如果省略第二个参数,默认使用空格补全长度。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-11-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
ES6基础-ES6的扩展
编辑器(VS Code, Atom,Sublime)或者IDE(Webstorm)
达达前端
2019/11/26
5450
「ES6基础」你需要知道的Array数组新方法(上)
在日常工作中我们经常会与数组打交道,因此需要熟练掌握数组操作的相关方法,ES6中关于数组的操作,又给我们带来了哪些惊喜呢,Array数组操作又添加了哪些新方法?
前端达人
2019/07/17
7580
「ES6基础」你需要知道的Array数组新方法(上)
ES6的语法
世间万物皆对象
2024/03/20
1840
ES6中数组做了哪些新扩展?
ES6通过扩展元素符...,好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列
用户6256742
2024/07/15
990
【ES6基础】Array数组的新方法(上)
在日常工作中我们经常会与数组打交道,因此需要熟练掌握数组操作的相关方法,ES6中关于数组的操作,又给我们带来了哪些惊喜呢,Array数组操作又添加了哪些新方法?
前端达人
2019/07/13
9030
【ES6基础】Array数组的新方法(上)
ES6学习笔记(一)
ES6的标准发布很久了,ES7和ES8已经出来了,直到现在才开始学习,已经有点晚了,希望可以赶得上吧。
CherishTheYouth
2019/07/30
5780
ES6学习笔记(一)
ES6、ES7、ES8学习指南
ES全称ECMAScript,ECMAScript是ECMA制定的标准化脚本语言。目前JavaScript使用的ECMAScript版本为ECMAScript-262。
CrazyCodeBoy
2018/10/09
1.7K0
JavaScript 又出新特性了?来看看这篇就明白了
https://juejin.im/post/5ca2e1935188254416288eb2
崔庆才
2019/05/06
1.6K0
ES6/ES7/ES8/ES9/ES10常用特性和新特性
变量的改变,添加了块级作用域的概念 let声明变量(块级作用域),let是更完美的var,它声明的全局变量不是全局属性widow的变量,这便解决了for循环中变量覆盖的问题 const声明常量(会计作用域)
公众号---人生代码
2020/06/28
1.5K0
ES6新特性
ES6的常用新特性简介,全部特性可参阅 Ecma-International MDN ES6入门 ES6 教程
WindRunnerMax
2020/08/27
7900
ECMAScript 6 笔记(二)
  用两个双字节的形式表达字符时,如果直接在\u后面跟上超过0xFFFF的数值(比如\u20BB7),JavaScript会理解成\u20BB+7。由于\u20BB是一个不可打印字符,所以只会显示一个空格,后面跟着一个7。
超然
2018/08/03
8140
ES6技术
JavaScript之前是LiveScript,具体的资料,大家自己查一下百度。网景公司的语言,这个公司为了把自己的公司语言,走出美国,迈向世界。把自己的语言提交给了ECMA。
张哥编程
2024/12/19
1070
ES6技术
ES6中数组新增扩展盘点
ES6通过扩展元素符...,好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列
@超人
2021/07/05
5730
ES6中数组新增扩展盘点
ES6总结
书到用时方恨少啊 于是2022年的规划又多了一项:多看书 不积跬步无以至千里 不积小流无以成江海
小吕
2022/09/26
6030
Javascript数组方法(ES5-ES6)
join(speparator):将数组的元素组起一个字符串,spearator为分隔符,省略的话则用默认用逗号为分隔符,该方法只接收一个参数,即分隔符。
用户9298250
2021/12/29
1.1K0
常见的数组基本用法
ES5方法:pop push shift unshift reverse sort splice
前端迷
2021/04/09
9450
JavaScript——ES6新增语法特性
ES的全称是ECMAScript,它是由ECMA国际标准化组织制定的一项脚本语言的标准化规范
岳泽以
2022/10/26
4330
JavaScript——ES6新增语法特性
ES6 数组方法归纳整理
Array.from() 可接收三个参数,第一个参数为类数组对象,第二个参数为映射函数,如果使用了映射函数,可以传第三个参数表示映射函数的this值。
全栈程序员站长
2022/06/27
6000
ES7、ES8、ES9、ES10、ES11、ES12新特性大全!
如果fromIndex为负值,使用数组长度 + fromIndex计算出的索引作为新的fromIndex,如果新的fromIndex为负值,则搜索整个数组。
zz_jesse
2024/07/04
3150
ES7、ES8、ES9、ES10、ES11、ES12新特性大全!
从零开始学 Web 之 ES6(六)ES6基础语法四
在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识点,期间也会分享一些好玩的项目。现在就让我们一起进入 Web 前端学习的冒险之旅吧!
Daotin
2018/09/30
4670
相关推荐
ES6基础-ES6的扩展
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档