{%hackmd tXTfhDH6QTWNg5QB_ZtSuw %} # 第n節 --- # es6語法 ---- ECMAScript 6 (簡稱 ES6),是 JavaScript 語言新一代的標準,在 2015 年 6 月正式發佈。 ---- ### 會教的 Block Scope Arrow Functions Default Function Parameters Spread/Rest Operator Template Literals for...of Promise ---- ### 不會教的 Map/WeakMap Set/WeakSet class Symbol Iteratore Generators Octal and Binary Literals Array and Object Destructuring super Object Literal Extensions --- ## Spread/Rest Operator ---- ```javascript const a=[1,2,3,4]; const b=[5,6,7,8]; ``` ---- ```javascript console.log(a.concat(b)); //[1, 2, 3, 4, 5, 6, 7, 8] ``` ```javascript console.log([...a,...b]); //[1, 2, 3, 4, 5, 6, 7, 8] ``` --- ## Template Literals ---- ```javascript const a="hello world:line 1"; const b="hello world:line 2"; ``` ---- ```javascript console.log(a+"\n"+b); ``` ```javascript console.log(`${a} ${b}`); ``` --- ## Promise ---- ```javascript function addEvent(eventName,callback){ if(eventName="wait1sec")setTimeout(callback,1000); }; ``` ---- ```javascript // set some event addEvent("wait1sec",function(){console.log("!");}); ``` ```javascript // set some event async function test(){ await new Promise(function(resolve,reject){ addEvent("wait1sec",resolve); }); console.log("!"); }; test() ``` 非常F__k code --- ## Default Function Parameters ---- ```javascript function helloWorld(stringToLog="hi"){ console.log(stringToLog); } ``` ---- ```javascript helloWorld("nope"); // nope ``` ```javascript helloWorld(); // hi ``` --- ## 實用的Array.prototype.__ ---- ```json [{ "name":"<user's name>", "hobby":["baseball","sleeping"], "like":0 },{ ... }...] ``` ---- ### ~~其實你可以用for迴圈寫~~ ---- 在陣列尾加入新user ```javascript= let user=[...]; user.push({ name:"<user's name>", hobby:["baseball","sleeping"], like:0 }) ``` ---- 依照like數排列user ```javascript let users=[...]; users=users.sort((a,b)=>(a.like>b.like)); ``` ---- 為所有人加上一個like ```javascript let users=[...]; users=users.map((x)=>{x.like+=1;return x;}) ``` ---- 找出所有like>10的人 ```javascript let users=[...]; result=users.filter((x)=>(x.like>10)); ``` ---- 找出第一個like>10的人 ```javascript let users=[...]; result=users.find((x)=>(x.like>10)); ``` ---- 找出最後一個like>10的人 ```javascript let users=[...]; result=users.some((x)=>(x.like>10)); result=users.reverse().find((x)=>(x.like>10)); ``` ---- 把所以有人印在控制台上 ```javascript let users=[...]; users.forEach(console.log); ``` ---- 取出並刪除最後一個user ```javascript let users=[...]; console.log(users.pop()); console.log(users);//少了一個 ``` ---- 取出第二個到第四個user ```javascript let users=[...]; users.slice(1,3); ``` ---- 取得所有user的like總和 ```javascript let users=[...]; users.reduce((a,b)=>(a+b.like),0); // or users.map((x)=>(a.like)).reduce((a,b)=>(a+b)); ``` --- ## 實作sha256 --- ## typed array ---- ### Int__Array ```javascript [1,5,4,7,65] ``` ```javascript Int16Array.from([1,5,4,7,65]) ``` ---- 把數字加到2的16次以上 --- ## crypto.subtle.digest ---- ```javascript let somethingToEncrypt=Int16Array.from([1,5,4,7,65]); crypto.subtle.digest("sha-512",somethingToEncrypt).then(console.log); ``` --- ## 成果 ---- ```javascript /** * hash an string by salted sha512 * @param value * @returns {Promise<string>} hashed sting wiht length 64 */ async function hash(value) { const hashed = await crypto.subtle.digest("sha-512", Int16Array.from(value.split("").map((x) => x.charCodeAt(0)))); return String.fromCharCode(...new Uint8Array(hashed)); } ``` ---- ```typescript import { config } from "../deps.ts"; const dict = config().HASH_TABLE; //same salt, bc it's convienent const salt = "4hs'\"\\87*8mnGTV?"; /** * hash an string by salted sha512 * @param value * @returns {Promise<string>} hashed sting wiht length 64 */ async function hash(value: string) { value += salt; const hashed = await crypto.subtle.digest("sha-512", Int16Array.from(value.split("").map((x) => x.charCodeAt(0)))); let result = ""; new Uint8Array(hashed).forEach((x) => { result += parseChar(x); }); return result; } function parseChar(val: number) { return dict[val % dict.length]; } export default hash; ```
{"metaMigratedAt":"2023-06-16T16:12:16.953Z","metaMigratedFrom":"YAML","title":"第n節","breaks":true,"slideOptions":"{\"transition\":\"slide\"}","description":"ECMAScript 6 (簡稱 ES6),是 JavaScript 語言新一代的標準,在 2015 年 6 月正式發佈。","contributors":"[{\"id\":\"6d8efe8e-dbdf-4e5a-8c38-356b0d1df76d\",\"add\":4321,\"del\":115}]"}
    293 views
   Owned this note