es6相关语法
写在开头
- 以前学习js的之后es6语法一直没有系统性学习,今天专门抽时间学习一下,希望可以有所收获,细节拉满
- 本文章参考自 稀土掘金——网络被骗500《ES6核心,值得驻足花一天时间来学习》
let 和 const
es5变量申明方式 var function
es6新增let 和 const 还有import 和 class
- let 变量
{ let a = 0; var b = 1; } console.log(a,b) //这边会报错说a未定义
- 为什么会未定义是因为let 存在块级作用域,对变量进行限制,只存在块级作用域里
- let 不存在变量提升(面试都问烂了)出现暂时性死区
- 为什么出现暂时性死区呢?因为es6规定,用let和const申明的变量,在一开始就形成了块级作用域,在开始是没有办法访问的,知道声明语句完成,才能被访问。
- let 不允许重复声明变量
- const 常量(声明一个只读属性的变量,不可更改,不可先声明后赋值,生成块级作用域)
- let 有的它都是有的
- 保证常量的原理,只能保证常量栈区的值是不变的,也就是说基本类型的值可以保持不变,如果这个值是一个引用数据类型,栈区保存的是对应常量的地址,地址是不变的,但是堆区内容确实可以改变的
- 真正的常量 Object.freeze()
字符串方法
- for of 字符串遍历
const a = "wdnmd" for(item of a ){ console.log(item) } //w d n m d
- includes方法(有用到过)判断是否存在值,他和indexof都能判断字符串和数组,但是indexof判断NaN的时候不准确
- repeat()(用到过)
var a='lang' console.log(a.repeat(3));//langlanglang
- startwith,endwith(没见过)
startWith('str',n):返回布尔值,表示参数字符串是否在原字符串的头部。 endsWith('str',n):返回布尔值,表示参数字符串是否在原字符串的尾部。其中str表示要判断的值,n表示从目标字符串的第几个元素开始。 var str='hello world' console.log(str.startsWith('hello',0)); //true console.log(str.startsWith('world',6)); //true console.log(str.startsWith('world',0)); //false
- 模板字符串!!!!(非常常用)在模板字符串的 ${} 中可以写任意表达式,但是同样的,对 if / else 判断、循环语句无法处理。
函数拓展
- 函数可以指定默认值
function con(a,b=5){ console.log(a,b) return b } //注意的点就是,不能使用let,const重复声明
- 箭头函数(超重点!)
- 箭头函数体内的this对象,就是指向定义它所在的父级,而不是使用时候的对象,this指向是永远无法改变的,定义的时候就确定了
- 不可以使用构造函数,不可以用new
- 不能使用arguments对象,可以用rest参数代替
- 箭头函数没有原型prototype 函数本身是没有this的
数组扩展
- 扩展运算符(...)
//可以用于拼接数组
const arr = [11,2]
console.log([1,...arr,5,...arr])
//返回不是一个数组,而是各个数组的值
var arr=[1,2,3]
function f(x,y,z){
return x+y+z
}
console.log(f(...arr)); //6
解构赋值
- 数组解构
分离变量的声明
let a,b
[a,b]=[1,2]
//a =1 ,b=2
//也可以设置默认的值
[a=5,b=7] = [1]
//a =1,b=7
- 对象解构
var {a = 10, b = 5} = {a: 3};
console.log(a); // 3
console.log(b); // 5