1.let命令
ES6新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。
var命令会发生“变量提升”现象,即变量可以在声明之前使用,值为undefined。为了纠正这种现象,let命令改变了语法行为,它所声明的变量一定要在声明后使用,否则报错。这在语法上,称为“暂时性死区”(temporal dead zone,简称TDZ)。例如:在let x前增加一句typeof x就会报错,因为同一块作用域在let x之前,x无法进行任何操作。
let实际上为JavaScript新增了块级作用域,在{}被包围的范围外,不受内层的let变量影响(但会受var的“变量提升”影响)。
2. const命令
const声明一个只读的常量。一旦声明,常量的值就不能改变,且声明时必须立即初始化,不能留到以后赋值。const的作用域与let命令相同:只在声明所在的块级作用域内有效。
3.字符串、数值、数组、对象扩展api
let str = 'abcde';
console.log(str.includes('b'));//true
console.log(str.includes('a'));//true
console.log(str.startsWith('a'));//true
console.log(str.endsWith('t'));//false
console.log(str.repeat(3));//abcdeabcdeabcde
console.log(0b1010);//10
console.log(0o56);//46
console.log(Number.isFinite(123));//true
console.log(Number.isFinite(Infinity));//false
console.log(Number.isNaN(NaN));//true
console.log(Number.isInteger(123));//true
console.log(Number.isInteger(123.456));//false
console.log(Number.isInteger(123.0));//true
console.log(Number.parseInt('321abc456'));//321
console.log(Number.parseInt('a123abc456'));//NaN
console.log(Math.trunc(321.123));//321
const arr = [1, 2, 3, 4];
let res = arr.find(function (a){
return a < -1;
});
console.log(res);//返回undefind;
let obj = {};
let obj1 = {username:'puppy',age:40};
let obj2 = {sex:'男'};
Object.assign(obj,obj1,obj2);
console.log(obj);//{username:'puppy',age:40,sex:'男'};
let obj3 = {};
let obj4 = {money: 4000};
obj3.__proto__= obj4;
console.log(obj3)//{};
console.log(obj3.money);//4000;
4.Set和Map数据结构
const qq = new Set(['a', 'a', 'b', 1, 2, 1])
console.log(qq) // {'a', 'b', 1, 2}
qq.add('c').add({'a': 1})
console.log(qq) // {'a', 'b', 1, 2, 'c', {a: 1}}
console.log(qq.size) // 6
qq.has(a) // true
④ Set的遍历方法
由于Set结构没有键名,只有键值,所以keys方法和values方法的返回结果完全相同。
keys():返回键名的遍历器。
values():返回键值的遍历器。
entries():返回键值对的遍历器。
forEach():使用回调函数遍历每个成员。
const test = new Set(['a', 'b', 'c'])
for (let item of test.keys()) {
console.log(item)
}
// a
// b
// c
for (let item of test.values()) {
console.log(item)
}
// a
// b
// c
for (let item of test.entries()) {
console.log(item)
}
// ["a", "a"]
// ["b", "b"]
// ["c", "c"]
for (let i of test) {
console.log(i)
}
// a
// b
// c
test.forEach((key, value) => console.log(key + '-' + value))
// a-a
// b-b
// c-c
const one = new Map([['a', 111], ['b', 222]])
console.log(one) // {"a" => 111, "b" => 222}
one.get('a') // 111
const two = new Map([['c', 3]])
const three = new Map(two)
three.get('c') // 3
three.has('c') // true
three.set('d', 5)
three.get('d') // 5
three.delete('d')
three.get('d')//undefined
three.clear()
three//{}
③ Map的遍历方法
keys():返回键名的遍历器
values():返回键值的遍历器
entries():返回键值对的遍历器
forEach():使用回调函数遍历每个成员
const map = new Map([['a', 1], ['b', 2]])
for (let key of map.keys()) {
console.log(key)
}
// "a"
// "b"
for (let value of map.values()) {
console.log(value)
}
// 1
// 2
for (let i of map.entries()) {
console.log(i)
}
// ["a", 1]
// ["b", 2]
for (let [key, value] of map.entries()) {
console.log(key, value)
}
// "a" 1
// "b" 2
// for...of...遍历map等同于使用map.entries()
for (let [key, value] of map) {
console.log(key, value)
}
// "a" 1
// "b" 2
未完待续。