若是你能快速准确的回答如下问题,那么能够直接跳过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
调:函数调用
一:一元运算符
成:乘除加减
作衣: 按位左右移
叫:比较运算符(大于 小于)
等:等于
位:按位与或
裸:逻辑与或
跳:条件运算符
服:赋值
展:展开运算符
昭:逗号