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登記在全局環境中,給以後搜索用。markdown
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、字符串app
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]
複製代碼