前言
众所周知JavaScript是JavaScript之父Brendan Eich为了工作需要仅仅花了几星期开发出来的,所以在一些地方有一些小缺陷,这些小缺陷在之后被无数同行吐槽,所以在后续的版本更新中,大名鼎鼎的es6诞生了。之后的版本都被统称为es6+,那就让我们看看这个名声在外的es6都有哪些东西吧。
let const var
在es6之前,都是用var声明变量,但是var有一个小小的问题:变量提升 一般我们写代码都是先声明再使用,但如果出现下面的代码阁下又该如何应对?
console.log(a);
var a=1
按常人思维这里是应该报错的,但是很可惜,这里并不会报错而是undefined,因为在js的引擎里它是这样的
var a
console.log(a);
a=1
这种情况就是变量提升。该报错的时候不报错,在一些复杂的代码里,一些小伙伴可能就会傻眼了,而在es6中就能解决这个问题,那就是let。
而const是一个常量,进行赋值后不能进行更改
const a=1
const b=a
b=a
console.log(b);
好!现在问题又来了,如果const声明的是一个对象那么它对象里的值可以更改吗? 答案是可以的
const obj={
age:18
}
obj.age=19
console.log(obj);//不报错 和存储结构有关 堆栈
这是因为对象是引用数据类型,而数字是原始数据类型,原始数据类型和引用数据类型的存储结构不同导致的。 原始数据类型是放入栈中的,而引用数据类型在栈存放的是它的地址值,属性存放在堆中。当堆中的属性发生改变,地址值不会改变。
解构
解构是js中是一种方便的语法,它允许我们从数组或对象中提取值并赋值给变量。
如下
let arr=['a','b','c','d']
let [a,b,c,d]=arr
console.log([a,b,c,d]);
let arr=[1,2,3,4,5]
let [a,b,...c]=arr
console.log(c);//[3,4,5]
这种可以理解为一个萝卜一个坑,...x则视为其余的都赋给该变量
箭头函数
箭头函数是es6中引入的一种新的函数编写方法。()=>{} 这种方法和function几乎一样,唯一的区别就是this,在普通函数中,this的值是在函数被调用时确定的,它指向调用该函数的对象。而在箭头函数中,this的值是在函数定义时确定的,它指向定义箭头函数的上下文。这意味着箭头函数没有自己的this,它继承父级作用域的this。
var arr=[1,4,6,8,2,7,3]
arr.sort((a,b)=>{
return a-b//升序 b-a降序
})
函数
在一些函数中我们需要传入参数,但是我们不知道传多少个参数,这个时候我们可以这样
function foo(a,b,...args) {//接收剩余参数
console.log(args);
}
foo(1,2,3,4);//[3,4]
...args可以将多余的参数以数组的形式返回
BigInt类型
bigint是一种原始数据类型,用来存储超过Number类型的数字类型范围的整数
Number范围在-(2^53-1)到(2^53-1)之间,超过这个范围number就会失真
let big = 999999999999999999999999999999999999999n
let big1 = 1n
console.log(big + big1);
结果为
endsWith
这个方法用来判断字符串是否以指定字符串为结尾。返回true或者false
let str='949519059@qq.com'
console.log(str.endsWith('@qq.com'));//true
}
同理startsWith,includes用法一致
Symbol
Symbol类型是原始数据类型,创建了一个独一无二的值
小提示:==会将等号双方进行类型转换,值相同就为true(例如'1'==1 true),===则不会,数据类型不同就为false('1'===1 false)
总结
es6中还有许多的惊喜,这里还是冰山一角,后面还会持续更新,希望对你有用,能点赞更好了。