1.let、const
es6之前只有全局作用域和函数作用域,es6新增块级作用域。let、const 允许创建块级作用域。
let关键词声明变量,特点:代码块内有效、不能重复声明、不存在变量提升。
const声明常量,其实 const 其实保证的不是变量的值不变,而是保证变量指向的内存地址所保存的数据不允许改动。对于复杂类型(对象 object,数组 array,函数 function),这个「常量」并非一成不变的,如:
var a = 2;
{
let a = 3;
console.log(a); // 3
}
console.log(a); // 2
const ARR = [5,6];
ARR.push(7);
console.log(ARR); // [5,6,7]
ARR = 10; // TypeError
2. 数组和对象解构
解构可以避免在对象赋值时产生中间变量
// 数组结构
let [a, b, c] = [1, 2, 3]; // a=1,b=2,c=3
let [a, [[b], c]] = [1, [[2], 3]]; // a=1,b=2,c=3
let [, , d] = [1, 2, 3]; // d = 3
let [e, ...n] =[1, 2, 3]; // e = 1, n = [2,3]
let [a = 1, b] = []; // a = 1, b = undefined
let [a, b, c, d, e] = 'hello'; // a='h' b='e' c='l' d='l' e='o'
// 当解构模式有匹配结果,且匹配结果是 undefined 时,会触发默认值作为返回结果。
let [a = 3, b = a] = []; // a = 3, b = 3
let [a = 3, b = a] = [1]; // a = 1, b = 1
let [a = 3, b = a] = [1, 2]; // a = 1, b = 2
const str = '/foo/sec/thr';
const [, first] = str.split('/');
console.log(first); // foo
// 对象结构
let {name, age} = {name: 'vae', age: 18}; // name='vae' age = 18
let {p: [x, { }] } = {p: ['hello', {y: 'world'}] }; // x = 'hello'
let obj = {p: [{y: 'world'}] };
let {p: [{ y }, x ] } = {p: [{y: 'world'}] }; // x=undefined y='world'
let {a, b, ...rest} = {a: 10, b: 20, c: 30, d: 40}; // a=10 b=20 rest={c:30,d:40}
let {a = 10, b = 5} = {a: 3}; // a=3 b=5
let {a: aa = 10, b: bb = 5} = {a: 3}; // aa=3 bb=5
//重命名(命名冲突时解决方法)
const name = 'jack';
const { name: newName } = { name: 'vae', age: 18 };
console.log(name); // jack
console.log(newName); // vae
3.模板字符串
${ ... }
用来渲染一个变量
支持换行
const name = 'tom';
const str = `hello, this is ${name} ------- ${1+3}`; // str = 'hello, this is tom ------- 4'
带标签的模板字符串(可用于调整字符串内顺序)
const name = 'tom';
const gender = true;
function myFunTag(strings, name1, gender1) {
console.log(strings, name1, gender1); // ['hello es2015 ', ' is a ', ''] tom true
return strings[2] + name1 + strings[0] + gender1 + strings[1]; // 可以对字符串顺序进行调整;
}
const str = myFunTag`hello es2015 ${name} is a ${gender}`;
console.log(str); // tomhello es2015 true is a
4.字符串的扩展方法
- includes() 是否包含某个字符串
- startsWith() 是否以某个字符串开头
- endsWith() 是否以某个字符串结尾
- repeat(param) 将字符串重复指定次数返回
- padStart() 用 参数字符串 从头部(左侧)补全原字符串
- padEnd()