diff --git a/docs/javascript.md b/docs/javascript.md
index 6953b83..0309a24 100644
--- a/docs/javascript.md
+++ b/docs/javascript.md
@@ -25,12 +25,42 @@ console.warn('hello %s', 'QuickReference');
console.error(new Error('Oops!'));
```
+### 断点调试
+
+```javascript
+function potentiallyBuggyCode() {
+ debugger;
+ // 做可能有问题的东西来检查,逐步通过等。
+}
+```
+
+**debugger** 语句调用任何可用的调试功能。
+
### 数字
```javascript
let amount = 6;
let price = 4.99;
let home = 1e2;
+let m = 0644; // 八进制数字 420
+```
+
+### let 关键字
+
+```javascript
+let count;
+console.log(count); // => undefined
+count = 10;
+console.log(count); // => 10
+```
+
+
+### const 关键字
+
+```javascript
+const numberOfColumns = 4;
+// TypeError: Assignment to constant...
+numberOfColumns = 8;
```
### 变量
@@ -98,49 +128,128 @@ let age = 7;
`Tommy is ${age} years old.`;
```
-### let 关键字
+### 字符串
+
-```javascript
-let count;
-console.log(count); // => undefined
-count = 10;
-console.log(count); // => 10
+
+```js
+var abc = "abcdefghijklmnopqrstuvwxyz";
+var esc = 'I don\'t \n know'; // \n 换行
+var len = abc.length; // 字符串长度
+abc.indexOf("lmno"); // 查找子字符串,如果不包含则 -1
+abc.lastIndexOf("lmno"); // 最后一次出现
+abc.slice(3, 6); // 去掉“def”,负值从后面计算
+abc.replace("abc","123"); // 查找和替换,接受正则表达式
+abc.toUpperCase(); // 转换为大写
+abc.toLowerCase(); // 转换为小写
+abc.concat(" ", str2); // abc + " " + str2
+abc.charAt(2); // 索引处的字符:“c”
+abc[2]; // 不安全,abc[2] = "C" 不起作用
+// 索引处的字符代码:“c”-> 99
+abc.charCodeAt(2);
+// 用逗号分割字符串给出一个数组
+abc.split(",");
+// 分割字符
+abc.split("");
+// 数字转为十六进制 (16)、八进制 (8) 或二进制 (2)
+128.toString(16);
```
+### 数字
+
-### const 关键字
-
-```javascript
-const numberOfColumns = 4;
-// TypeError: Assignment to constant...
-numberOfColumns = 8;
+
+```js
+var pi = 3.141;
+pi.toFixed(0); // 返回 3
+pi.toFixed(2); // 返回 3.14 - 使用金钱
+pi.toPrecision(2) // 返回 3.1
+pi.valueOf(); // 返回号码
+Number(true); // 转换为数字
+// 自 1970 年以来的毫秒数
+Number(new Date())
+// 返回第一个数字:3
+parseInt("3 months");
+// 返回 3.5
+parseFloat("3.5 days");
+// 最大可能的 JS 数
+Number.MAX_VALUE
+// 最小可能的 JS 编号
+Number.MIN_VALUE
+// -无穷
+Number.NEGATIVE_INFINITY
+// 无穷
+Number.POSITIVE_INFINITY
```
+#### Math
+
+```ts
+const pi = Math.PI; // 3.141592653589793
+Math.round(4.4); // = 4 - 数字四舍五入
+Math.round(4.5); // = 5
+Math.pow(2,8); // = 256 - 2 的 8 次方
+Math.sqrt(49); // = 7 - 平方根
+Math.abs(-3.14); // = 3.14 - 绝对,正值
+Math.ceil(3.14); // = 4 - 返回 >= 最小整数
+// = 3 - 返回 <= 最大整数
+Math.floor(3.99);
+// = 0 - 正弦
+Math.sin(0);
+// OTHERS: tan,atan,asin,acos,余弦值
+Math.cos(Math.PI);
+// = -2 - 最低值
+Math.min(0, 3, -2, 2);
+// = 3 - 最高值
+Math.max(0, 3, -2, 2);
+// = 0 自然对数
+Math.log(1);
+// = 2.7182pow(E,x) 自然对数的底数
+Math.exp(1);
+// 0 到 1 之间的随机数
+Math.random();
+// 随机整数,从 1
+Math.floor(Math.random() * 5) + 1;
+```
+
+### 全局函数
+
+
+
+```js
+// 像脚本代码一样执行字符串
+eval();
+// 从数字返回字符串
+String(23);
+// 从数字返回字符串
+(23).toString();
+// 从字符串返回数字
+Number("23");
+// 解码 URI。 结果:“我的 page.asp”
+decodeURI(enc);
+// 编码 URI。 结果:“my%page.asp”
+encodeURI(uri);
+// 解码 URI 组件
+decodeURIComponent(enc);
+// 对 URI 组件进行编码
+encodeURIComponent(uri);
+// 是一个有限的合法数
+isFinite();
+// 是一个非法数字
+isNaN();
+// 返回字符串的浮点数
+parseFloat();
+// 解析一个字符串并返回一个整数
+parseInt();
+```
+
+
JavaScript 条件
----
-### if Statement (if 语句)
-
-```javascript
-const isMailSent = true;
-
-if (isMailSent) {
- console.log('Mail sent to recipient');
-}
-```
-
-### Ternary Operator (三元运算符)
-
-```javascript
-var x=1;
-
-// => true
-result = (x == 1) ? true : false;
-```
-
-### Operators
-
+### 操作符
+
```javascript
@@ -189,14 +298,29 @@ false ?? 'I lose' // false
'' ?? 'Damn it' // ''
```
+### if Statement (if 语句)
+
+```javascript
+const isMailSent = true;
+if (isMailSent) {
+ console.log('Mail sent to recipient');
+}
+```
+
+### Ternary Operator (三元运算符)
+
+```javascript
+var age = 1;
+
+// => true
+var status = (age >= 18) ? true : false;
+```
+
### else if
```javascript
const size = 10;
-
-if (size > 100) {
- console.log('Big');
-} else if (size > 20) {
+if (size > 20) {
console.log('Medium');
} else if (size > 4) {
console.log('Small');
@@ -206,30 +330,13 @@ if (size > 100) {
// Print: Small
```
-### switch 语句
-
-```javascript
-const food = 'salad';
-
-switch (food) {
- case 'oyster':
- console.log('海的味道');
- break;
- case 'pizza':
- console.log('美味的馅饼');
- break;
- default:
- console.log('请您用餐');
-}
-```
-
### == vs ===
```javascript
-0 == false // true
-0 === false // false, 不同类型
-1 == "1" // true, 自动类型转换
-1 === "1" // false, 不同类型
+0 == false // true
+0 === false // false, 不同类型
+1 == "1" // true, 自动类型转换
+1 === "1" // false, 不同类型
null == undefined // true
null === undefined // false
'0' == false // true
@@ -238,6 +345,36 @@ null === undefined // false
`==` 只检查值,`===` 检查值和类型。
+### switch 语句
+
+```javascript
+const food = 'salad';
+
+switch (food) {
+ case 'oyster': console.log('海的味道');
+ break;
+ case 'pizza': console.log('美味的馅饼');
+ break;
+ default:
+ console.log('请您用餐');
+}
+```
+
+### switch 多 case - 单一操作
+
+```javascript
+const food = 'salad';
+
+switch (food) {
+ case 'oyster':
+ case 'pizza':
+ console.log('美味的馅饼');
+ break;
+ default:
+ console.log('请您用餐');
+}
+```
+
JavaScript Functions 函数
----
@@ -266,8 +403,9 @@ const rocketToMars = function() {
```
### 箭头函数 (ES6)
-
+
+
#### 有两个参数
```javascript
@@ -440,7 +578,7 @@ JavaScript Arrays
### 数组
```javascript
-const fruits = ["apple", "orange", "banana"];
+const fruits = ["apple", "dew", "banana"];
// 不同的数据类型
const data = [1, 'chicken', false];
```
@@ -463,7 +601,7 @@ console.log(myArray[1]); // 200
### 可变图表
-| | add | remove | start | end |
+| | 添加 | 删除 | 开始 | 结束 |
|:----------|:---:|:------:|:-----:|:---:|
| `push` | ✅ | | | ✅ |
| `pop` | | ✅ | | ✅ |
@@ -481,17 +619,18 @@ const numbers = [1, 2];
numbers.push(3, 4, 5);
```
-将项目添加到末尾并返回新的数组长度。
+将项目**添加到末尾**并返回新的数组长度。
### 方法 .pop()
```javascript
-const fruits = ["apple", "orange", "banana"];
+const fruits = ["apple", "dew", "banana"];
const fruit = fruits.pop(); // 'banana'
-console.log(fruits); // ["apple", "orange"]
+
+console.log(fruits); // ["apple", "dew"]
```
-从末尾删除一个项目并返回已删除的项目。
+从**末尾删除**一个项目并返回已删除的项目。
### 方法 .shift()
@@ -500,7 +639,7 @@ let cats = ['Bob', 'Willy', 'Mini'];
cats.shift(); // ['Willy', 'Mini']
```
-从头删除一个项目并返回已删除的项目。
+**从头删除**一个项目并返回已删除的项目。
### 方法 .unshift()
@@ -512,7 +651,7 @@ cats.unshift('Willy');
cats.unshift('Puff', 'George');
```
-将项目添加到开头并返回新的数组长度。
+将项目**添加到开头**并返回新的数组长度。
### 方法 .concat()
@@ -529,7 +668,6 @@ numbers.concat(newFirstNumber)
如果你想避免改变你的原始数组,你可以使用 concat。
-
JavaScript 循环
----
@@ -537,7 +675,7 @@ JavaScript 循环
```javascript
while (condition) {
- // code block to be executed
+ // 要执行的代码块
}
let i = 0;
while (i < 5) {
@@ -549,12 +687,12 @@ while (i < 5) {
### 反向循环
```javascript
-const fruits = ["apple", "orange", "banana"];
+const fruits = ["apple", "dew", "berry"];
for (let i = fruits.length - 1; i >= 0; i--) {
console.log(`${i}. ${fruits[i]}`);
}
-// => 2. banana
-// => 1. orange
+// => 2. berry
+// => 1. dew
// => 0. apple
```
@@ -605,7 +743,9 @@ for (let i = 0; i < 99; i += 1) {
```javascript
for (i = 0; i < 10; i++) {
- if (i === 3) { continue; }
+ if (i === 3) {
+ continue;
+ }
text += "The number is " + i + "
";
}
```
@@ -632,6 +772,28 @@ for (let index in fruits) {
// => 2
```
+### label 语句
+
+
+
+```js
+var num = 0;
+
+outPoint:
+for(var i = 0; i < 10; i++) {
+ for(var j = 0; j < 10; j++) {
+ if(i == 5 && j == 5) {
+ continue outPoint;
+ }
+ num++;
+ }
+}
+
+alert(num); // 95
+```
+
+从 `alert(num)` 的值可以看出,`continue outPoint;` 语句的作用是跳出当前循环,并跳转到 `outPoint`(标签)下的 `for` 循环继续执行。
+
### for...of 循环
```javascript
@@ -644,10 +806,46 @@ for (let fruit of fruits) {
// => banana
```
+### for await...of
+
+
+
+```javascript
+async function* asyncGenerator() {
+ var i = 0;
+ while (i < 3) {
+ yield i++;
+ }
+}
+
+(async function() {
+ for await (num of asyncGenerator()) {
+ console.log(num);
+ }
+})();
+
+// 0
+// 1
+// 2
+```
+
+### 可选的 for 表达式
+
+```js
+var i = 0;
+
+for (;;) {
+ if (i > 3) break;
+ console.log(i);
+ i++;
+}
+```
+
JavaScript 迭代器(Iterators)
----
-
+
+
### 分配给变量的函数
```javascript
@@ -716,8 +914,9 @@ const filteredArray = randomNumbers.filter(n => {
JavaScript 对象(Objects)
----
-
+
+
### 访问属性
```javascript
@@ -753,7 +952,7 @@ console.log(classElection.place); // undefined
```
### 可变的
-
+
```javascript
@@ -821,6 +1020,25 @@ console.log(origNum);
console.log(origObj.color);
```
+### 工厂函数
+
+
+
+```javascript
+// 一个接受 'name','age' 和 'breed' 的工厂函数,
+// 参数返回一个自定义的 dog 对象。
+const dogFactory = (name, age, breed) => {
+ return {
+ name: name,
+ age: age,
+ breed: breed,
+ bark() {
+ console.log('Woof!');
+ }
+ };
+};
+```
+
### 速记对象创建
```javascript
@@ -842,23 +1060,6 @@ const cat = {
console.log(cat.whatName()); // => Pipey
```
-### 工厂函数
-
-```javascript
-// 一个接受 'name','age' 和 'breed' 的工厂函数,
-// 参数返回一个自定义的 dog 对象。
-const dogFactory = (name, age, breed) => {
- return {
- name: name,
- age: age,
- breed: breed,
- bark() {
- console.log('Woof!');
- }
- };
-};
-```
-
### 方法
```javascript
@@ -897,8 +1098,10 @@ myCat.name = 'Yankee';
JavaScript Classes
----
-### Static Methods
+### 静态方法/字段
+
+
```javascript
class Dog {
constructor(name) {
@@ -909,17 +1112,34 @@ class Dog {
console.log('This is ' + this._name + ' !');
}
- // A static method
+ // 静态方法
static bark() {
console.log('Woof!');
}
+
+ static {
+ console.log('类静态初始化块调用');
+ }
}
+
const myDog = new Dog('Buster');
myDog.introduce();
-// Calling the static method
+
+// 调用静态方法
Dog.bark();
```
+#### 公有静态字段
+
+```js
+class ClassStaticField {
+ static staticField = 'static field'
+}
+
+console.log(ClassStaticField.staticField)
+// 预期输出值:"static field"
+```
+
### Class
```javascript
@@ -933,10 +1153,35 @@ class Song {
console.log('Song playing!');
}
}
+
const mySong = new Song();
mySong.play();
```
+### extends
+
+```javascript
+// Parent class
+class Media {
+ constructor(info) {
+ this.publishDate = info.publishDate;
+ this.name = info.name;
+ }
+}
+// Child class
+class Song extends Media {
+ constructor(songData) {
+ super(songData);
+ this.artist = songData.artist;
+ }
+}
+const mySong = new Song({
+ artist: 'Queen',
+ name: 'Bohemian Rhapsody',
+ publishDate: 1975
+});
+```
+
### Class Constructor
```javascript
@@ -964,68 +1209,44 @@ class Song {
}
```
-### extends
-
-```javascript
-// Parent class
-class Media {
- constructor(info) {
- this.publishDate = info.publishDate;
- this.name = info.name;
- }
-}
-// Child class
-class Song extends Media {
- constructor(songData) {
- super(songData);
- this.artist = songData.artist;
- }
-}
-const mySong = new Song({
- artist: 'Queen',
- name: 'Bohemian Rhapsody',
- publishDate: 1975
-});
-```
JavaScript Modules
----
-
+
-### Export
+### Export / Import
```javascript
// myMath.js
-// Default export
+// 默认导出 Default export
export default function add(x,y){
- return x + y
+ return x + y
}
-// Normal export
+// 正常导出 Normal export
export function subtract(x,y){
- return x - y
+ return x - y
}
-// Multiple exports
+// 多重导出 Multiple exports
function multiply(x,y){
- return x * y
+ return x * y
}
function duplicate(x){
- return x * 2
+ return x * 2
}
export {
- multiply,
- duplicate
+ multiply, duplicate
}
```
-### Import
+#### import 加载模块
```javascript
// main.js
import add, { subtract, multiply, duplicate } from './myMath.js';
-console.log(add(6, 2)); // 8
-console.log(subtract(6, 2)) // 4
+console.log(add(6, 2)); // 8
+console.log(subtract(6, 2)) // 4
console.log(multiply(6, 2)); // 12
-console.log(duplicate(5)) // 10
+console.log(duplicate(5)) // 10
// index.html
```
@@ -1035,43 +1256,43 @@ console.log(duplicate(5)) // 10
```javascript
// myMath.js
function add(x,y){
- return x + y
+ return x + y
}
function subtract(x,y){
- return x - y
+ return x - y
}
function multiply(x,y){
- return x * y
+ return x * y
}
function duplicate(x){
- return x * 2
+ return x * 2
}
-// Multiple exports in node.js
+// node.js 中的多个导出
module.exports = {
- add,
- subtract,
- multiply,
- duplicate
+ add,
+ subtract,
+ multiply,
+ duplicate
}
```
-### 加载模块
+#### require 加载模块
```javascript
// main.js
const myMath = require('./myMath.js')
-console.log(myMath.add(6, 2)); // 8
-console.log(myMath.subtract(6, 2)) // 4
+console.log(myMath.add(6, 2)); // 8
+console.log(myMath.subtract(6, 2)) // 4
console.log(myMath.multiply(6, 2)); // 12
-console.log(myMath.duplicate(5)) // 10
+console.log(myMath.duplicate(5)) // 10
```
JavaScript Promises
----
-
+
### Promise 状态
-
+
```javascript
@@ -1201,7 +1422,7 @@ promise.then(res => {
JavaScript Async-Await
----
-
+
### 异步
@@ -1298,7 +1519,7 @@ const jsonObj = {
};
```
-另见:[JSON 备忘单](./json)
+另见:[JSON 备忘单](./json.md)
### XMLHttpRequest
diff --git a/docs/json.md b/docs/json.md
index d43af37..801e567 100644
--- a/docs/json.md
+++ b/docs/json.md
@@ -82,7 +82,7 @@ Have to be delimited by double quotes
### 数字
-
+
| Type | Description |
diff --git a/docs/toml.md b/docs/toml.md
index 02aaf0c..b01d78b 100644
--- a/docs/toml.md
+++ b/docs/toml.md
@@ -171,7 +171,7 @@ bar = 2
```
### 类数组
-
+
```toml
@@ -249,7 +249,7 @@ bat = "hi"
```
### Inline Table
-
+
```toml