若是你能快速準確的回答如下問題,那麼能夠直接跳過git
先上個記憶祕訣: 括點油調一成作衣 叫等位裸跳服展昭es6
括: 括號github
點: 成員訪問ide
油:new函數
調:函數調用ui
一:一元運算符this
成:乘除加減spa
作衣: 按位左右移指針
叫:比較運算符(大於 小於)code
等:等於
位:按位與或
裸:邏輯與或
跳:條件運算符
服:賦值
展:展開運算符
昭:逗號
function F() {
this.a = 1
this.f = function() {
this.a = 3
}
}
F.f = function() {
this.a = 2
}
var r = new F.f()
複製代碼
先執行F.f, 再執行new ...()
var str = "Hello" + true ? "World" : "JS";
複製代碼
+的優先級高於 ...?...:...
function myFunc () {
var x = 0;
var y = 1
return (x,y);
}
var a = myFunc ()
複製代碼
逗號操做符 對它的每一個操做數求值(從左到右),並返回最後一個操做數的值。
var obj = {
a: {
f: function(){
return function(config){
console.log(this)
};
}
}
};
var type = "a";
var config = {};
new obj[type].f()(config);
複製代碼
js引擎將把代碼解析成(new provider[type].get())返回的是匿名函數,且在Window環境中執行,因此this指向Window
var x = 1
console.log(x)
console.log(x++)
console.log(++x)
複製代碼
x++是先使用x再加1,++x是先加1再用x
var x = 1
console.log(x+++1)
console.log(++x+1)
複製代碼
x++是先使用x再加1,++x是先加1再用x
var x = 1
console.log(!x++)
var x = 1
console.log(!++x)
複製代碼
第一個console, x++的優先級高於!, 因此至關於!1 等於false
第二個console, !和++x屬於同一級,從右往左計算,至關於!2 等於false
var x = 1
var y = 10
var z = y+++x
複製代碼
至關於(y++)+x
console.log(void 1 + 1)
複製代碼
void的優先級高於+,因此至關於(void 1) + 1, 而void 1等於undefined,因此結果是NaN
var x = 2
console.log(x*2**3)
複製代碼
** 優先級高於 * 至關於x * (2 ** 3)
var x = 8
console.log(x>>2+1)
複製代碼
var x = 8
console.log(x+=x>>2)
複製代碼
>
優先級高於+= 至關於x += 2
0||!0&&1
複製代碼
! 優先級最高,先求!0
&&優先級比||高
var o ={
ab: 1
}
console.log('a' + 'b' in o)
複製代碼
先算'a' + 'b'
function * f() {
var x = 1
var y = yield x + 1
console.log(y)
var z = yield y + 1
console.log(z)
}
var g = f()
console.log(g.next(10).value)
console.log(g.next(100).value)
console.log(g.next(1000).value)
複製代碼
Generator 函數的調用方法與普通函數同樣,也是在函數名後面加上一對圓括號。不一樣的是,調用 Generator 函數後,該函數並不執行,返回的也不是函數運行結果,而是一個指向內部狀態的指針對象,也就是上一章介紹的遍歷器對象(Iterator Object)。
下一步,必須調用遍歷器對象的next方法,使得指針移向下一個狀態。也就是說,每次調用next方法,內部指針就從函數頭部或上一次停下來的地方開始執行,直到遇到下一個yield表達式(或return語句)爲止。
next方法能夠帶一個參數,該參數就會被看成上一個yield表達式的返回值
因此console.log(g.next(10).value)的10並無用
function f() {
let x = y = 1
}
f()
console.log(x, y)
複製代碼
賦值運算符順序是從右到左,因此先執行y=1,因爲沒有定義y,因此這裏y是全局變量
再把y賦值給x,但x是局部變量,在函數外訪問不到
故答案是undefined 1
const colorConfig = {
red: true,
blue: false,
green: true,
black: true,
yellow: false,
}
const colors = ["pink", "red", "blue"]
console.log(colorConfig.colors[1])
複製代碼
從左往右
先上個記憶祕訣: 括點油調一成作衣 叫等位裸跳服展昭
括: 括號
點: 成員訪問
油:new
調:函數調用
一:一元運算符
成:乘除加減
作衣: 按位左右移
叫:比較運算符(大於 小於)
等:等於
位:按位與或
裸:邏輯與或
跳:條件運算符
服:賦值
展:展開運算符
昭:逗號