1.let(变量) 与 const(常量)
在es6中我们通常用let来定义变量和const来定义常量 ,它们都是块级作用域 ,在同一个代码块中不允许重复声明
很多小伙伴搞不明白let和var的区别:
var定义变量存在变量提升,没有块级作用域,容易造成变量污染
console.log(a) //undefined
var a = 10
for(var b = 0;b < 10; b++){
}
console.log(b)// 输出10 大括号外面还是可以输出
let定义变量就不同了,它不存在变量提升问题,只有定义之后才能使用此变量(不存在变量提升一但 let a =10 没有定义前输出都会报错) ,而且它有{ }作用域(在大括号外面输出 ib也会报错is not defined)
console.log(a) //ReferenceError: a is not defined
let a = 10
for(let b = 0;b < 10; b++){
}
console.log(b)//ReferenceError: b is not defined
const 主要特性:
不存在变量提升问题,只有定义之后才能使用
此变量const 定义的常量,无法被重新赋值
当定义常量的时候,必须定义且初始化,否则报语法错误
const 定义的常量,也有 块级作用域
const 定义变量为对象,可修改对象里的值
console.log(c)//ReferenceError: a is not defined
const a = 10
a = 20 //无法赋值a
const b = {
a:1
}
b.a = 2
console.log(b.a)// 输出2,const定义变量为对象,可修改对象里的值
2.模板字符串
let name = "小明"
let msg = `${name}会唱歌`
console.log(msg) //小明会唱歌
3.变量的解构赋值
const person = {
name:'小明',
skill:'唱歌',
age:18
}
const { name, skill, age } = person
console.log(name, skill, age) // 小明,唱歌,18
const personList = ['小明','小红','小亮']
const [ xiaoming, xiaohong, xiaoliang ] = personList
console.log(xiaoming, xiaohong, xiaoliang) // '小明','小红','小亮'
4.箭头函数
在es6中 ,提供了函数的简洁写法 ,我们称之为箭头函数 ,箭头函数,本质上就是一个匿名函数 ,箭头函数的特性: 箭头函数内部的 this, 永远和 箭头函数外部的 this 保持一致 ,例如this:
//基本用法,定一个function
let a = ()=>{
//代码区域
}
//指向问题,this指向
let b = {
say:()=>{
console.log(this)
}
}
b.say()// this => window
5.对象扩展
属性简写:允许对象中直接写变量 ,这时属性名为变量名 ,属性值为变量值
let name = '小明'
let age = 18
let person = {
name,//不需要name:name
age, //不需要age:age
skill(){//不需要skill:function(){}
console.log('唱歌')
}
}
6.(Spread Operator)展开运算符(...)
最常用的方法有三个
将字符串转成数组
合并数组
浅克隆
//字符串转成数组
let str = 'abcd'
const list = [...str]
console.log(list)//[a,b,c,d]
//合并数组
const a = [1,2,3]
const b = [4,5,6]
const c = [...a,...b]
//浅克隆 适用对象或者数组
let d = [...a]
let obj = {
a:1,
b:2,
c:3
}
let obj2 = { ...obj }
console.log(d)// [1,2,3]
console.log(obj2)//{ a:1,b:2, c:3 }
6.includes大致有两用法
includes查找数组书否包含值
查找字符串是否包含 "xiaoming"字符串
let arr = [1,2,3,4,5]
arr.includes(1) // true
arr.includes(10) // false
let str = "Hello world, welcome to the xiaoming";
let n = str.includes("xiaoming")//true