一、Es6 中的 let 和 const 声明的变量
1.let声明的变量只在它所在的代码块有效,在同一个代码块(作用域)下,不可以重复声明,可以被重新赋值。
{ let num = 10; num = 100; console.log(num); //100 } console.log(num) //ReferenceError: num is not defined
for循环的计数器,就很合适使用let命令。
for (let i = 0; i < 10; i++) { console.log(i); } console.log(i);// ReferenceError: i is not defined (在代码块外面打印的变量 i 将会报错)
2.const声明的常量只在它所在的代码块有效,在同一个代码块(作用域)下,不可以重复声明,并且不可以被重新赋值(基本类型的数据)。
const 主要用于定义一个作用域中的常量,就是这个变量可以在自己的代码块儿中使用,但其值不能被修改。
这个作用域可以全局作用域,也可以是函数作用以及局部作用域。
//对于基本类型,值不能改变 const s = "离离原上草"; s = "一岁一枯荣"; // TypeError: Assignment(分配) to constant(常量) variable. //对于引用类型, const obj = {x: 0}; obj = {y: '123'}; // TypeError: Assignment to constant variable. obj.x = '123'; //obj存储的是一个地址,地址不能变,但对象本身是可变的
二、箭头函数
1.标准函数箭头函数的转换
// 普通函数 function f(arg) { return arg } // 执行普通函数 var ret = f(555); console.log(ret) // 转换为箭头函数 var f1 = (arg)=>{return arg}; // 执行箭头函数 var ret2 = f1('world'); console.log(ret2)
2.当函数只有一个参数时,小括号 ()可以省略
// 接上一例子,标准箭头函数 var f1 = (arg)=>{return arg}; // 省略 () var f1 = arg=>{return arg};
3.当函数体中,只有一条 return 语句时,大括号 {} 可以省略
// 接上例,省略 {} var f1 = arg=>arg; // 执行箭头函数 var ret2 = f1('world'); console.log(ret2)
三、字符串
1.ES 6 中字符串的新功能
// startsWith 判断字符串以什么字符为开始,返回一个布尔值 var str = "http://www.qfedu.com" if (str.startsWith("http://")){ console.log("http 地址") } else if(str.startsWith("git")){ console.log("git 地址") }; // endsWith 判断字符串以什么为结尾 if (str.endsWith("com")){ console.log("国际域名") } // includes 判断某些字符串是否存在其内 var s = "hello world "; console.log(s.includes('h'));
2.字符串模板
// ES 5 var name = "shark" var age = 18 var tag = "<tr><td>" + name + "</td>" + "<td>" + age + "<td></tr>" // ES 6 var name = "shark" var age = 18 var tag = `<tr><td>${name}</td><td>${age}</td></tr>`
四、扩展运算符
扩展运算符(spread)是三个点(...)。将一个数组转为用逗号分隔的参数序列。
function f(x, y, z) { console.log(x); console.log(z); } let args = [0, 1, 2]; f(...args); <-------风格符-------> // ES6 的写法 Math.max(...[14, 3, 77]) // 等同于 Math.max(14, 3, 77);
五、数组遍历(for循环)
ES6 还提供三个新的方法——entries(),keys()和values()——用于遍历数组。它们都返回一个遍历器对象,可以用for...of循环进行遍历,唯一的区别是keys()是对键名的遍历、values()是对键值的遍历,entries()是对键值对的遍历。
for (let index of arr.keys()) { console.log(index); } // 0 // 1 for (let elem of arr.values()) { console.log(elem); } // 或者 for (let i of li){ console.log(i); } // 'a' // 'b' // 同时遍历值和索引号 for (let [index, elem] of arr.entries()) { console.log(index, elem); }