前言
什么是ES6?
ES6 是 ECMAScript 2015 的简称,是 JavaScript 语言的一个重要更新版本。发布于2015年,这个版本引入了许多新特性和语法改进,旨在使 JavaScript 更适合构建复杂和大规模的应用程序。ES6 引入了如箭头函数、Promise、模块系统、Class语法、let与const声明、模板字符串、解构赋值等特性,极大地丰富了语言的功能并提高了代码的可读性和可维护性。尽管正式名称为ECMAScript 2015,但因习惯延续,人们常称之为ES6。随着时间推移,后续的ECMAScript版本(如ES2016、ES2017等)也被统称为“ES6+”特性集合的一部分。
let、const和var
相同之处:
- 都是用来声明变量
- let和const 都提供了块级作用域,不支持变量提升
不同之处:
- var(适用于ES5及更早版本)在声明变量的时候会出现变量提升
- let声明的变量可以重新赋值
- const一旦被赋值后,其值就不能被改变
var声明变量
console.log(a);
var a = 1
打印的结果是undefined,却不报错,是因为var声明的变量会出现变量提升。
在js引擎的眼里代码是这样的:
var a
console.log(a);
a = 1
let声明变量
let a = 1
let b = a
b = 2
console.log(b);
打印结果
const声明变量
const a = 1
const b = a
b = 2
console.log(b);
打印结果
出现这个错误Assignment to constant variable. 说明你正在给一个常量重新赋值。
问:用 const 声明的对象里面的值可以改变吗?
答案是肯定的
const obj = {
age: 18
}
obj.age = 19
console.log(obj.age);
打印结果
分析 因为v8在预编译的时候会产生一个全局执行上下文调用栈,而栈的空间是有限的,对象可以无限大,所以对象的值放在一个堆里,调用栈中存储对象的内存地址,地址不会变,但是堆中存放的对象的值可以改变,所以打印的结果是19。
解构
解构是什么?
解构是一种允许你从数组或对象中直接提取值到变量的表达式。
从数组中取值
let arr = ['a', 'b', 'c', 'd']
let a = arr[0]
console.log(a)
打印结果
let arr = ['a', 'b', 'c', 'd']
let[a, b, c, d] = arr
console.log(arr)
打印结果
从对象中取值
let obj = {
a: 1,
b: 2,
c: {
n: 3
}
}
let { a, b, c, c: { n } } = obj
console.log(a, b, c, n);
打印结果
箭头函数
什么是箭头函数
箭头函数是ES6(ECMAScript 2015)中引入的一种新的函数表达式编写方式,它提供了一种更简洁、更清晰的语法来定义函数。
var arr = [1, 3, 2, 9, 7]
arr.sort((a, b) => {
return b - a
})
// 这样写法和上面一样,不写{},默认有return
arr.sort((a, b) => b - a
)
console.log(arr);
打印结果
sort方法用于给数组排序 b - a是降序,a - b是升序。
函数
function foo(a, b, ...args) {
console.log(args);
}
foo(1, 2, 3, 4)
打印结果
...args用于接收函数多余的参数并以数组的形式返回
BigInt类型
什么是BigInt类型
BigInt类型是一种内置的原始数据类型,它能够安全地存储和操作极大或极小的整数,这些整数超出了标准JavaScript数字类型的范围。在JavaScript中,Number类型使用双精度浮点数表示,这限制了它可以精确表示的整数范围大约在 -(2^53 - 1) 到 2^53 - 1 之间。对于超过这个范围的整数,使用Number类型将会丢失精度。
BigInt类型则不受此限制,它可以表示任意大小的整数,保证了整数运算的精确度。BigInt类型的值通过在整数的末尾附加n来字面量创建。
2^53 + 1本来应该是9007199254740993,但是在浏览器中运行结果为
无法得到正确的值,于是使用BigInt类型来操作极大或极小的整数,直接在整数后面加n
let big = 999999999999999999999999999999999999999n
let big1 = 1n
console.log(big + big1);
打印结果
字符串方法——endsWith()
endsWith方法能干啥?
这个方法用于判断一个字符串是否以指定的子字符串结束。如果字符串确实以指定的子字符串结尾,则返回 true;否则,返回 false。
let str = '2906561443@qq.com'
console.log(str.endsWith('@qq.com'));
if(str.endsWith('@qq.com')) {
console.log('这是qq邮箱');
}
打印结果
原始类型Symbol
什么是Symbol?
Symble 类型也是原始类型,创建一个独一无二的值
var a = Symbol(123)
var b = Symbol(123)
console.log(a === b);
打印结果