变量声明
- let声明变量不会挂载在window中,不会造成全局变量污染
var num = 123;
console.log(num)//123
console.log(window.num)//undefined
- 新增一个块级作用域{},以前只有函数作用域和全局作用域
- let不允许重复声明
let num = 100;
let num = 200;
console.log(num)//报错Uncaught SyntaxError: Identifier 'num' has already been declared
- let声明不存在声明提前(只是人为看到的效果,实际上有声明提前,只是提前到暂时性死区中)
console.log(a);
var a = 10; // undefined
console.log(b);
let b = 12; // Uncaught ReferenceError: Cannot access 'y' before initialization
2.2 声明常量
1.const声明变量不会挂载在window中,不会造成全局变量污染
2. 新增一个块级作用域{},以前只有函数作用域和全局作用域
3. const不允许重复声明
4. const声明不存在声明提前(只是人为看到的效果,实际上有声明提前,只是提前到暂时性死区中)
5. 不允许被修改,不允许改变内存空间地址
6. const 声明和赋值必须一次性完成,后期不允许修改存储空间地址;
不允许改变
const a = 1;
console.log(a) //1
a = 2;
console.log(a) //报错 Uncaught TypeError: Assignment to constant variable.
不允许重新赋值
const a;
a = 100;
console.log(a)
字符串模板
let str = `天气很好`;
let day = "今天"
console.log(`${day}天气很好`)//今天天气很好
console.log(str)//天气很好
console.log(`1+1=${1+1}`)//1+1=2
ES6新增的字符串API
includes(str)返回一个布尔值,表示是都找到参数字符串
[1, 2, 3].includes(2)//true
startsWith(str)返回一个布尔值,表示参数字符串是否在字符串的头部
var str = "Hello world";
var n = str.startsWith("Hello");//true
endWith(str)返回一个布尔值,表示参数字符串是否在字符串的尾部
和上面类似
repet(num)返回一个新的字符串,将指定字符串重复
var str = "aaa";
str.repeat(2);//aaaaaa
codePointAt()能够正确处理4个字节存储的字符串,返回一个字符的码点
let str1 = "𠮷";
let str2 = "吉";
console.log(str1.length)//2
console.log(str2.length)//1
console.log(str1.codePointAt())//134071
console.log(str2.codePointAt())//21513
normalize() 方法移除空的文本节点,并连接相邻的文本节点。
…
解构赋值
ES6允许按照一定的模式,从数组和对象中提取值,对变量进行赋值,这种被称为解构(Destructuing)解构赋值是对赋值运算符的一种扩展,主要针对对象和数组中的变量进行赋值,简化了代码的书写长度,提高代码编写效率。
// 数组的解构
// 如果解构不成功,变量的值为undefined
let [foo,bar] = [1];
console.log(foo,bar)//1 undefind
let [a,[b,c],d] = [1,[2,3],4] //a=1;b=2;c=3;d=4
// 对象的解构
let {bar:q,foo} = {foo : "abc",bar:"qwe"}
console.log(foo,q)//abc qwe
…运算符(扩展运算符)
收集 : 形参的收集,类似于arguments,剩余参数收集
function sum(a,...arg){
console.log(arg)//[2,3]
console.log(a,arg)1 [2,3]
}
sum(1,2,3)
展开 :ES6的展开针对于数组 ES7的展开针对于对象的
let arr = [1,2,3];
let arr1 = [4,5,6]
console.log([...arr,...arr1])
还可以进行克隆
let arr1 = [1,2,3]
let arr2 = [...arr1]
console.log(arr1,arr2)//[1,2,3][1,2,3]
console.log(arr1[3] == arr2[3])//对数组深克隆true
默认参数
ES6提供可以给函数参数添加默认值的方法
在ES6默认参数中,只有当没有传递参数或参数为undefined,才会使用默认值,null、’’、false、NaN认为是有效传递
注意:只要给函数参数加上默认值,当前函数自动变成严格模式执行
function add(a, b = 1) {
return a + b;
}
console.log(add(10)) //11
//如果不传入值为NAN
。。。。。。。。。。