let 和 const 命令声明的变量都只在它们所在的块级作用域中才有效。 如果区块中存在 let 和 const 命令,则这个区块对这些命令声明的变量从一开始就形成封闭作用域。
变量的解构赋值
ES6 允许按照一定的模式,从数组和对象中提取值,对变量进行赋值,称为解构。
数组
1 2 3 4 5
let [a, b, c,d] = [“aa”, “bb”, 77,88]; //数组结构 let [a,b,[c,d],e] =[“aa”,’bb’,[33,44],55]; //嵌套数组解构 let [a,b,,e] =[“aa”,’bb’,[33,44],55]; //空缺变量 let [a,b,,e,f] =[“aa”,’bb’,[33,44],55]; //多余变量 let [a,b,,e,f=’hello’] =[“aa”,’bb’,[33,44],55]; //默认值
对象解构
1 2 3 4 5 6 7 8 9 10 11 12 13
let obj = { uid: 121, uname: '张三' }; let obj = newObject(); obj.uid = 111; obj.uname = '张三'; let { uid: id, uname: name } = obj; //顺序改变无影响 console.log(name); //张三
var arr1 = [1, 2, 2, 3, 4, 5]; var arr2 = [1, 2]; 求两数据的不同值,结果为[3, 4, 5]
方案一
调用第三方工具:underscore
1 2 3 4
var arr1 = [1, 2, 2, 3, 4, 5]; var arr2 = [1, 2]; _.difference(arr1, arr2); => [3, 4, 5]
方案二
手写常规办法,创建临时数组
1 2 3 4 5 6 7 8 9 10
// past var arr1 = [1, 2, 2, 3, 4, 5]; var arr2 = [1, 2]; var temp = []; for (var i = 0; i < arr1.length; i++) { if (arr2.indexOf(arr1[i]) === -1) { temp.push(arr1[i]); } } console.log(temp);
方案三
调用 es6 的数组操作 api
1 2 3 4
// es6 let arr1 = [1, 2, 2, 3, 4, 5]; let arr2 = [1, 2]; console.log(arr1.filter(item => !arr2.includes(item)));