一、let和var声明变量区别
- let声明的变量不可以重复声明,var可以
- let变量具有块级作用域,即只在当前代码块中有效;var变量不具有块级作用域,会声明到全局window上。
{
var name = "zcm";//全局
let height = "176";//块级
}
console.log(name);//zcm
console.log(height);//error
- let声明变量不存在变量提升,即不允许在变量声明之前使用该变量;var变量具有变量提升,当使用某个变量时间,会首先从全局中检索到(如果在之后定义了该变量)。
console.log(name);//undefined
var name = "zcm";
console.log(height);//error
let height = "176"
二、const常量
- const需要用来声明常量,必须赋予初始值(常命名大写);
const NAME = "zcm"
- 常量的值不可以修改(仅对于基础数据类型,如字符String、数字Number)
- 常量与let一样具有块级作用域;
- 常量对于数组、对象的值可以进行修改;(工作中可多使用const定义数组和对象,避免后续误操作)
三、 变量的解构赋值
解构赋值解释:ES6中允许开发者,以一种特殊的规则模式从变量中取值并进行赋值,这种方式称之为"解构赋值"。
- 数组的解构。
const tempArr = ["zcm","wcs","srz"];
const [zcm,wcs,srz = "hxl"] = tempArr;
console.log(zcm,wcs,srz);//zcm wcs srz
- 对象的解构。
const tempObj = {
name:"zcm",
sex:"man",
hanshu:function(){
console.log("我是函数")
}
}
const {name,sex,hanshu} = tempObj;
console.log(name,sex,hanshu);
//示例解构console对象,解构出log,后续打印可直接使用log
const {log} = console;
log("我将console对象中的log解构出来了")
四、 模板字符串
模板字符串通过反引号``,进行声明使用;
- 模板字符串使用更加便捷有效,内容中允许出现换行符;
//若使用双引号、单引号,会出现语法错误
var str = `好好学习,
天天向上`
- 模板字符串变量拼接,语法:${变量名}
var name = "zcm";
var who = `${name}是一个大帅哥`
五、 ES6对象的简化写法
允许直接在对象的大括号中,写入变量和函数,作为对象的属性和方法。
let name = "zcm";
let height = "176";
let obj = {
name,
height,
myheight:function(){
consoel.log("繁琐函数写法")
},
myname(){
console.log("简化函数写法")
}
}
六、 箭头函数
let fn = (a,b)=>{
return a+b;
}
//箭头函数特性
//特性1:箭头函数的this是静态的,始终指向声明箭头函数所在的作用域下this的值;call,apply无法该百年箭头函数的this指向(重要)
window.name = "zcm";
const MY = {
name:"zcm-copy"
}
//声明普通函数和箭头函数
function getName(){
console.log(this.name)
}
let getName1 = ()=>{
console.log(this.name)
}
//改变函数this指向
getName.call(My);//打印zcm-copy,普通函数被改变了this指向
getName.call(MY);//打印zcm,箭头函数始终this指向声明时作用域
//特性2:箭头函数不能作为实例化对象
//特性3:箭头函数不能使用arguments参数
let fn = (a,b,c)=>{
console.log(arguments)
}
fn(1,2,2);//报错,无法打印arguments
//箭头函数的简写形式
1)参数只有一个时,可省略();
2)当代码语句体只有一句话的时候,可以省略花括号{}
七、 ES6中rest参数
rest参数是用于获取函数的实参(获取的参数是一个数组),用来代替ES5中arguments(获取的参数是一个伪数组,获取参数不可使用数组的方法)
//ES5获取实参
function getArguments(){
console.log(arguments)
}
getArguments(1,2,2,3,4);//打印一个伪数组
//ES6获取实参: 注意rest参数必须放在参数最后
function getRest(a,b,...rest){
console.log(a,b,rest)
}
getRest(12,2,sdfsdfsdf,sdfsdfsdf)
八、 ES6扩展运算符spread
扩展运算符使用“...”,可以将数组转化为逗号连接的参数序列。
//用途1:数组的合并;
let arr1 = [1,2,3];
let arr2 = [4.5,6];
let arr3 = [...arr1,...arr2];//[1,2,3,4,5,6]
//用途2:数组的克隆(浅拷贝基本数据类型);
let arr4 = [7,8];
let arr5 = [...arr4];
console.log(arr5);//[7,8]
//用途3:将伪数组转化为真数组;
假设arrTemp是一个伪数组,直接使用[...arrTemp]即可。
九、ES6新增数据类型Symbol(个人感觉不常用)
Symbol是一种新的数据类型,用来表示独一无二的值,用来解决变量名冲突的问题。
//1.Symbol创建
let s = Symbol();
let s1 = Symbol("描述文字");
//2.Symbol.for()创建
let s2 = Symbol.for("描述文字1")
//3.Symbol不可以与其他数据类型做运算
//巧记数据类型:ussonb
//Symbol的使用示例
1.给对象添加独一无二的属性或方法
let mysymbol1 = Symbol("mysymbol1");
let mysymbol2 = Symbol("mysymbol2");
let mine = {
name:"zcm",
[mysymbol1]:"176",
[mysymbol2]:function(){
console.log("我要说话")
}
}
//调用
console.log(mine[mysymbol1]);
mine[mysymbol2]();