var 聲明沒有塊級做用域
let,const具備塊級做用域,不具備變量提高
const 定義常量,不能被從新賦值
複製代碼
// 數組
let [a, b, c, d] = [1, 2, 3];
console.log(a); // 1
console.log(b); // 2
console.log(d); //undefined
// 對象(保持鍵名一致)
let { e, f } = { e: 1, f: 2 };
console.log(e);// 1
console.log(f);// 2
複製代碼
let s = "hello world!";
for (let item of s) {
console.log(item);// h,e,l,l,o, ,w,o,r,l,!
}
複製代碼
JavaScript 只有indexOf方法,能夠用來肯定一個字符串是否包含在另外一個字符串中。ES6 又提供了三種新方法。javascript
這三個方法都支持第二個參數,表示開始搜索的位置。java
let s = 'Hello world!';
s.startsWith('world', 6) // true
s.endsWith('Hello', 5) // true
s.includes('Hello', 6) // false
複製代碼
const name = 'sheng';
const age = 18;
console.log(`My name is ${name} and is ${age} years old.`);
複製代碼
RegExp 構造函數
字符串的正則方法
u 修飾符
y 修飾符
sticky 屬性
flags 屬性
s 修飾符:dotAll 模式
後行斷言
Unicode 屬性類
具名組匹配
String.prototype.matchAll
複製代碼
// 若是參數類型不是數值,Number.isFinite一概返回false。
Number.isFinite(15); // true
Number.isFinite(NaN); // false
Number.isFinite(Infinity); // false
Number.isFinite('15'); // false
Number.isFinite(true); // false
// 若是參數類型不是數值,Number.isNaN一概返回false。
Number.isNaN(NaN) // true
Number.isNaN(15) // false
Number.isNaN('15') // false
Number.isNaN(true) // false
Number.isNaN(9/NaN) // true
Number.isNaN('true' / 0) // true
Number.isNaN('true' / 'true') // true
Number.isInteger(); //用來判斷一個數值是否爲整數。
Math.trunc // 方法用於去除一個數的小數部分,返回整數部分。
Number.isSafeInteger();//則是用來判斷一個整數是否落在這個範圍以內。
複製代碼
function foo(x = 5) {};
複製代碼
function add(...values) {
console.log(values);// [ 2, 5, 3 ]
}
add(2, 5, 3);
複製代碼
var f = v => v;
複製代碼
foo::bar;
// 等同於
bar.bind(foo);
複製代碼
console.log(...[1, 2, 3]); // 1 2 3
// 擴展運算符還能夠將字符串轉爲真正的數組。
[...'hello']// [ "h", "e", "l", "l", "o" ]
複製代碼
let arrayLike = {
'0': 'a',
'1': 'b',
'2': 'c',
length: 3
};
let arr2 = Array.from(arrayLike); // ['a', 'b', 'c']
Array.from('hello'); // ['h', 'e', 'l', 'l', 'o']
複製代碼
Array.of(3, 11, 8) // [3,11,8];
複製代碼
find()
findIndex()
fill()
entries()
keys()
values()
includes()
複製代碼
const foo = 'bar';
const baz = {foo};
baz // {foo: "bar"}
// 等同於
const baz = {foo: foo};
function f(x, y) {
return {x, y};
}
// 等同於
function f(x, y) {
return {x: x, y: y};
}
f(1, 2) // Object {x: 1, y: 2}
複製代碼
Object.is(); // 比較兩個值是否嚴格相等,與嚴格比較運算符(===)的行爲基本一致。不一樣之處只有兩個:一是+0不等於-0,二是NaN等於自身。
Object.assign(); //方法用於對象的合併
Object.getOwnPropertyDescriptor; // 方法能夠獲取該屬性的描述對象。
for...in; //循環遍歷對象自身的和繼承的可枚舉屬性(不含 Symbol 屬性)。
Object.keys; // 返回一個數組,包括對象自身的(不含繼承的)全部可枚舉屬性(不含 Symbol 屬性)的鍵名。
Object.getOwnPropertyNames(obj); // 返回一個數組,包含對象自身的全部屬性(不含 Symbol 屬性,可是包括不可枚舉屬性)的鍵名。
Object.getOwnPropertySymbols(obj); //返回一個數組,包含對象自身的全部 Symbol 屬性的鍵名。
Reflect.ownKeys(obj); // 返回一個數組,包含對象自身的全部鍵名,無論鍵名是 Symbol 或字符串,也不論是否可枚舉。
Object.keys(); // 返回一個數組,成員是參數對象自身的(不含繼承的)全部可遍歷(enumerable)屬性的鍵名。
Object.values(); // 方法返回一個數組,成員是參數對象自身的(不含繼承的)全部可遍歷(enumerable)屬性的鍵值。
Object.entries(); // 方法返回一個數組,成員是參數對象自身的(不含繼承的)全部可遍歷(enumerable)屬性的鍵值對數組。
super // 關鍵字 this關鍵字老是指向函數所在的當前對象,ES6 又新增了另外一個相似的關鍵字super,指向當前對象的原型對象。
複製代碼
ES5 的對象屬性名都是字符串,這容易形成屬性名的衝突。好比,你使用了一個他人提供的對象,但又想爲這個對象添加新的方法(mixin 模式),新方法的名字就有可能與現有方法產生衝突。若是有一種機制,保證每一個屬性的名字都是獨一無二的就行了,這樣就從根本上防止屬性名的衝突。這就是 ES6 引入Symbol的緣由。ios
let s = Symbol();
typeof s
// "symbol"
複製代碼
它相似於數組,可是成員的值都是惟一的,沒有重複的值。shell
const s = new Set();
[2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x));
for (let i of s) {
console.log(i);
}
// 2 3 5 4
複製代碼
WeakSet 結構與 Set 相似,也是不重複的值的集合。可是,它與 Set 有兩個區別。
首先,WeakSet 的成員只能是對象,而不能是其餘類型的值。
複製代碼
ES6 提供了 Map 數據結構。它相似於對象,也是鍵值對的集合,可是「鍵」的範圍不限於字符串,各類類型的值(包括對象)均可以看成鍵。編程
const m = new Map();
const o = {p: 'Hello World'};
m.set(o, 'content')
m.get(o) // "content"
m.has(o) // true
m.delete(o) // true
m.has(o) // false
複製代碼
只接受對象做爲鍵名(null除外),不接受其餘類型的值做爲鍵名。
複製代碼
Proxy 用於修改某些操做的默認行爲,等同於在語言層面作出修改,因此屬於一種「元編程」(meta programming), 即對編程語言進行編程。axios
var proxy = new Proxy({}, {
get: function(target, property) {
return 35;
}
});
proxy.time // 35
proxy.name // 35
proxy.title // 35
複製代碼
//定義類
class Point {
constructor(x, y) {
this.x = x;
this.y = y;
}
toString() {
return '(' + this.x + ', ' + this.y + ')';
}
}
複製代碼
const promise = new Promise(function(resolve, reject) {
// ... some code
if (/* 異步操做成功 */){
resolve(value);
} else {
reject(error);
}
});
promise.then(function(value) {
// success
}, function(error) {
// failure
});
複製代碼
function* helloWorldGenerator() {
yield 'hello';
yield 'world';
return 'ending';
}
var hw = helloWorldGenerator();
hw.next()
// { value: 'hello', done: false }
hw.next()
// { value: 'world', done: false }
hw.next()
// { value: 'ending', done: true }
hw.next()
// { value: undefined, done: true }
複製代碼
let array = [1,2,3,4];
if(array.includes(2)) {
console.log(true)
}
複製代碼
2**3 == 8
複製代碼
let obj = {a: 1, b: 2, c: 3};
Object.entries(obj).forEach(([key, value]) => {
console.log(key + ": " + value); // 輸出a: 1, b: 2, c: 3
})
複製代碼
async fetchData(query) =>{
try {
const response = await axios.get(`/q?query=${query}`);
const data = response.data;
return data;
}
catch (error) {
console.log(error)
}
}
fetchData(query).then(data => {
this.props.processfetchedData(data)
})
複製代碼