let与const
声明一个变量常见的是var
他们有这样几点不同:
var用于全局变量,可以声明多次
let用于局部变量,只可声明一次
const声明的变量必须初始化,否则会报错
{
let a = 0;
var b = 1;
}
局外输出b=1,但是a检测不到值
const A;
直接输出A会显示错误
解构赋值
数组模型的解构
解构赋值可以让代码更加简洁明了,无需一个字符一个字符声明赋值。有一些常见类型
let [a, b, c] = [1, 2, 3];//基本
let [a, [[b], c]] = [1, [[2], 3]];//可嵌套
let [a, , b] = [1, 2, 3]; //可忽略
let [a = 1, b] = []; // a = 1, b = undefined //不完全解构
let [a, ...b] = [1, 2, 3];//a = 1 b = [2, 3]//剩余运算符
let [a, b, c, d, e] = 'hello';//字符串等
注意:当解构模式有匹配结果,且匹配结果是 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
对象模型的解构
//基本
let { foo, bar } = { foo: 'aaa', bar: 'bbb' };
// 结果 foo = 'aaa', bar = 'bbb'
let { baz : foo } = { baz : 'ddd' }; // foo = 'ddd'
不完全解构
let obj = {p: [{y: 'world'}] };
let {p: [{ y }, x ] } = obj;
// 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}
MAP
Map类型是一种存储着许多键值对的有序列表
// 创建map对象
let map = new Map();
// set() 设置键值对
map.set('title', 'map title');
// get() 获取键对应的值, 不存在则返回undefined
map.get('title'); // map title
map的方法
var myMap = new Map();
myMap.set("bar", "baz");
myMap.set(1, "foo");
myMap.size; // 2
myMap.has("bar"); // true
理解map后通常要去尝试了解for…of和forEach两个迭代的高级方法,迭代即更替
箭头函数
箭头函数也可以使代码更简洁
如x => x * x
相当于
function (x) {
return x * x;
}
var f = (id,name) => ({id: id, name: name});
f(6,2); // 结果 {id: 6, name: 2}
数组方法
Array.of() 函数可将参数转换为数组,参数值可以包含不同类型
Array.from() 函数将类数组对象或可迭代对象转化为数组。可以这样理解,与Array.of() 不同的是Array.of() 中的是参数,而Array.from() 中的是数组
map 函数涉及到数组中每个元素的处理
在了解之后我会继续尝试其中的扩展(查找、填充、遍历等)
let map = {
do: function(n) {
return n * 2;
}}
let arrayLike = [1, 2, 3];
console.log(Array.from(arrayLike, function (n){ //arrayLike是伪类数组,这里没有特指逐个都会赋值
return this.do(n);//将参数处理后返回这里
}, map)); // 结果[2, 4, 6]
类数组对象
一个类数组对象必须含有 length 属性,且元素属性名必须是数值或者可转换为数值的字符
如
let arr = Array.from({
0: '1',
1: '2',
2: 3,
length: 3
});
console.log(); // ['1', '2', 3]
转换可迭代对象
下面将元素给map处理,用Array.from将map的字符串转换为数组
let map = new Map();
map.set('key0', 'value0');
map.set('key1', 'value1');
console.log(Array.from(map)); //结果[['key0', 'value0'],['key1',
// 'value1']]
将arr赋给对象Set用Array.from转换为数组
let arr = [1, 2, 3];
let set = new Set(arr);
console.log(Array.from(set)); // [1, 2, 3]