{%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}]"}