var PI = "a";
if (true) {
console.log(PI); // ReferenceError:沒法在初始化以前訪問「PI」
const PI = "3.1415926";
}
-----------------------------
var str = "Hi!";
if (true) {
console.log(str); // ReferenceError:沒法在初始化以前訪問「str」
let str = "Hello World!";
}
複製代碼
let [a, [[b], c]] = [1, [[2], 3]];
// a = 1
// b = 2
// c = 3
---------------------------
let [a, , b] = [1, 2, 3];
// a = 1
// b = 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';
// a = 'h'
// b = 'e'
// c = 'l'
// d = 'l'
// e = 'o'
複製代碼
let [a = 2] = [undefined]; // a = 2
當匹配結果未undefined時纔會觸發返回默認值基本html
let { foo, bar } = { foo: 'aaa', bar: 'bbb' };
// foo = 'aaa'
// bar = 'bbb'
let { baz : foo } = { baz : 'ddd' };
// foo = 'ddd'
複製代碼
可嵌套可忽略es6
let obj = {p: ['hello', {y: 'world'}] };
let {p: [x, { y }] } = obj;
// x = 'hello'
// y = 'world'
let obj = {p: ['hello', {y: 'world'}] };
let {p: [x, { }] } = obj;
// x = 'hello'
複製代碼
不徹底解構正則表達式
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}
複製代碼
解構默認值bash
let {a = 10, b = 5} = {a: 3};
// a = 3; b = 5;
let {a: aa = 10, b: bb = 5} = {a: 3};
// aa = 3; bb = 5;
複製代碼
let sy = Symbol("KK");
console.log(sy); // Symbol(KK)
typeof(sy); // "symbol"
// 相同參數 Symbol() 返回的值不相等
let sy1 = Symbol("kk");
sy === sy1; // false
複製代碼
let sy = Symbol("key1");
// 寫法1
let syObject = {};
syObject[sy] = "kk";
console.log(syObject); // {Symbol(key1): "kk"}
// 寫法2
let syObject = {
[sy]: "kk"
};
console.log(syObject); // {Symbol(key1): "kk"}
// 寫法3
let syObject = {};
Object.defineProperty(syObject, sy, {value: "kk"});
console.log(syObject); // {Symbol(key1): "kk"}
複製代碼
let yellow = Symbol("Yellow");//單例模式
let yellow1 = Symbol.for("Yellow");
yellow === yellow1; // false
let yellow2 = Symbol.for("Yellow");
yellow1 === yellow2; // true
複製代碼
簡單說Symbol.for()定義,若是有對應字符串的Symbol就返回,沒有就新建。在Symbol.for()定義的時候會把對應字符串的Symbol登記在全局環境中,給以後搜索用。app
var myMap = new Map();
myMap.set(0, "zero");
myMap.set(1, "one");
// 將會顯示兩個 log。 一個是 "0 = zero" 另外一個是 "1 = one"
for (var [key, value] of myMap) {
console.log(key + " = " + value);
}
--------------------------
// 將會顯示兩個 logs。 一個是 "0 = zero" 另外一個是 "1 = one"
myMap.forEach(function(value, key) {
console.log(key + " = " + value);
}, myMap)
複製代碼
var kvArray = [["key1", "value1"], ["key2", "value2"]];
// Map 構造函數能夠將一個 二維 鍵值對數組轉換成一個 Map 對象
var myMap = new Map(kvArray);
// 使用 Array.from 函數能夠將一個 Map 對象轉換成一個二維鍵值對數組
var outArray = Array.from(myMap);
複製代碼
var myMap1 = new Map([["key1", "value1"], ["key2", "value2"]]);
var myMap2 = new Map(myMap1);
console.log(myMap1 === myMap2);
// 打印 false。 Map 對象構造函數生成實例,迭代出新的對象。
複製代碼
var first = new Map([[1, 'one'], [2, 'two'], [3, 'three'],]);
var second = new Map([[1, 'uno'], [2, 'dos']]);
// 合併兩個 Map 對象時,若是有重複的鍵值,則後面的會覆蓋前面的,對應值即 uno,dos, three
var merged = new Map([...first, ...second]);
複製代碼
let string = "apple,banana,orange";
string.includes("banana"); // true
string.startsWith("apple"); // true
string.endsWith("apple"); // false
string.startsWith("banana",6) // true
複製代碼
console.log("h".padStart(5,"o")); // "ooooh"
console.log("h".padEnd(5,"o")); // "hoooo"
console.log("h".padStart(5)); // " h"
複製代碼
function f(){
return "have fun!";
}
let string2= `Game start,${f()}`;
console.log(string2); // Game start,have fun!
複製代碼
alert`Hello world!`;
// 等價於
alert('Hello world!');
複製代碼
const person = {age, name};
//等同於
const person = {age: age, name: name}
複製代碼
const person = {
sayHi(){
console.log("Hi");
}
}
//等同於
const person = {
sayHi:function(){
console.log("Hi");
}
}
複製代碼
const obj = {
["he"+"llo"](){
return "Hi";
}
}
複製代碼
let person = {name: "Amy", age: 15};
let someone = { ...person };
someone; //{name: "Amy", age: 15}
--------------------------
//合併對象
let age = {age: 15};
let name = {name: "Amy"};
let person = {...age, ...name};
person; //{age: 15, name: "Amy"}
複製代碼
let target = {a: 1};
let object2 = {b: 2};
let object3 = {c: 3};
Object.assign(target,object2,object3);
// 第一個參數是目標對象,後面的參數是源對象
target; // {a: 1, b: 2, c: 3}
-----------------
//非對象,先轉爲對象後返回
Object.assign(3); // Number {3}
typeof Object.assign(3); // "object"
複製代碼
//一是+0不等於-0
Object.is(+0,-0); //false
+0 === -0 //true
//二是NaN等於自己
Object.is(NaN,NaN); //true
NaN === NaN //false
複製代碼
console.log(Array.of(1, 2, 3, 4)); // [1, 2, 3, 4]
Array.from(arrayLike[,mapFn[,thisArg]])
console.log(Array.from([1, , 3])); // [1, undefined, 3]
------------------------
console.log(Array.from([1, 2, 3], (n) => n * 2)); // [2, 4, 6]
------------------------
//thisArg用於指定map函數執行時的 this 對象。
let map = {
do: function(n) {
return n * 2;
}
}
let arrayLike = [1, 2, 3];
console.log(Array.from(arrayLike, function (n){
return this.do(n);
}, map)); // [2, 4, 6]
複製代碼
轉換類數組必須含有length屬性,也可用轉換map、set、字符串函數
let arr = Array.of(1, 2, 3, 4);
console.log(arr.find(item => item > 2)); // 3
複製代碼
let arr = Array.of(1, 2, 1, 3);
// 參數1:回調函數
// 參數2(可選):指定回調函數中的 this 值
console.log(arr.findIndex(item => item = 1)); // 0
複製代碼
let arr = Array.of(1, 2, 3, 4);
// 參數1:用來填充的值
// 參數2:被填充的起始索引
// 參數3(可選):被填充的結束索引,默認爲數組末尾
console.log(arr.fill(0,1,2)); // [1, 0, 3, 4]
複製代碼
// 參數1:被修改的起始索引
// 參數2:被用來覆蓋的數據的起始索引
// 參數3(可選):被用來覆蓋的數據的結束索引,默認爲數組末尾
console.log([1, 2, 3, 4].copyWithin(0,2,4)); // [3, 4, 3, 4]
複製代碼
for(let [key, value] of ['a', 'b'].entries()){
console.log(key, value);
}
// 0 "a"
// 1 "b"
// 不使用 for... of 循環
let entries = ['a', 'b'].entries();
console.log(entries.next().value); // [0, "a"]
console.log(entries.next().value); // [1, "b"]
---------------------------
for(let key of ['a', 'b'].keys()){
console.log(key);
}
// 0
// 1
---------------------------
for(let value of ['a', 'b'].values()){
console.log(value);
}
// "a"
// "b"
複製代碼
// 參數1:包含的指定值
[1, 2, 3].includes(1); // true
// 參數2:可選,搜索的起始索引,默認爲0
[1, 2, 3].includes(1, 2); // false
複製代碼
console.log([1 ,[2, 3]].flat()); // [1, 2, 3]
// 指定轉換的嵌套層數
console.log([1, [2, [3, [4, 5]]]].flat(2)); // [1, 2, 3, [4, 5]]
// 無論嵌套多少層
console.log([1, [2, [3, [4, 5]]]].flat(Infinity)); // [1, 2, 3, 4, 5]
// 自動跳過空位
console.log([1, [2, , 3]].flat());<p> // [1, 2, 3]
-------------------------------
// 參數1:遍歷函數,該遍歷函數可接受3個參數:當前元素、當前元素索引、原數組
// 參數2:指定遍歷函數中 this 的指向
console.log([1, 2, 3].flatMap(n => [n * 2])); // [2, 4, 6]
複製代碼