题记
如果你能快速准确的回答以下问题,那么可以直接跳过
先祭出大杀招: 括点油调一成做衣 叫等位裸跳服展昭
断句:括点油,调一成,做衣; 叫等位,裸跳,服展昭
大家可以想象这样一个场景来辅助记忆:有一个服装店的老板叫展昭,我们要去他家做衣服,于是括了点油,讲价到一折,展昭很不爽,叫我们等位,不相等怎么办,表演一个裸跳(因为我们的衣服还没做好,现在是没穿衣服的哟)来说服展昭
解释
括: 括号
点: 成员访问
油:new
调:函数调用
一:一元运算符
成:乘除加减
做衣: 按位左右移
叫:比较运算符(大于 小于)
等:等于
位:按位与或
裸:逻辑与或
跳:条件运算符
服:赋值
展:展开运算符
昭:逗号
1. r等于什么
functionF(
){this.a =1
this.f =function(
){this.a =3
}
}
F.f =function(
){this.a =2}
varr =newF.f()
A. {a: 2}
B. {a: 1, f: ƒ}
C. {a: 3}
答案
答案: A
先执行F.f, 再执行new ...()
2. str等于什么
varstr ="Hello"+true?"World":"JS";
A. "World"
B. "Hello World"
C. "Hello JS"
答案
答案: A
+的优先级高于 ...?...:...
3. a等于什么
functionmyFunc(){
varx =0;
vary =1
return(x,y);
}
vara = myFunc ()
A. (0,1)
B. 0
C. 1
D. [0, 1]
答案
答案: C
逗号操作符 对它的每个操作数求值(从左到右),并返回最后一个操作数的值。
4. 打印什么
varobj = {
a: {f:function()
{returnfunction(config){console.log(this)
};
}
}
};
vartype ="a";
varconfig = {}
;newobj[type].f()(config);
A. obj
B. a
C. f
D. Window
答案
答案: D
js引擎将把代码解析成(new provider[type].
get())返回的是匿名函数,且在Window环境中执行,所以this指向Window
5.输出什么
varx =1console.log(x)console.log(x++)console.log(++x)
A. 1 2 3
B. 1 1 3
C. 1 1 1
D. 1 2 2
答案
答案: B
x++是先使用x再加1,++x是先加1再用x
6. 输出什么
varx =1console.log(x+++1)console.log(++x+1)
A. 2 4
B. 3 4
C. 1 2
答案
答案: A
x++是先使用x再加1,++x是先加1再用x
7. 输出什么
varx =1console.log(!x++)varx =1console.log(!++x)
A. false false
B. false true
C. true false
D. true true
答案
答案: A
第一个console, x++的优先级高于!, 所以相当于!1 等于false
第二个console, !和++x属于同一级,从右往左计算,相当于!2 等于false
8. z等于几
varx =1vary =10varz = y+++x
A. 11
B. 12
C. 10
D. 1
答案
答案: A
相当于(y++)+x
9. 输出什么
console.log(void1+1)
A. NaN
B. undefined
C. null
D. 2
答案
答案: A
void的优先级高于+,所以相当于(void 1) + 1, 而void 1等于undefined,所以结果是NaN
10. 输出什么
varx =2console.log(x*2**3)
A. 16
B. 64
C. NaN
D. TypeError
答案
答案: A
** 优先级高于 * 相当于x * (2 ** 3)
11. 输出什么
varx =8console.log(x>>2+1)
A. 3
B. 1
C. 33
D. NaN
答案
答案: B
优先级高于>> 相当于x >>3
12. 输出什么
varx =8console.log(x+=x>>2)
A. 4
B. 10
C. 8
D. 16
答案
答案: B
>优先级高于+= 相当于x += 2
13. 执行步骤是怎样
0||!0&&1
A. 0||(!(0&&1))
B. 0||((!0)&&1)
C. (0||(!0))&&1
答案
答案: B
! 优先级最高,先求!0
&&优先级比||高
14. 输出什么
varo ={ab:1}console.log('a'+'b'ino)
A. true
B. 'afalse'
C. 'atrue'
D. false
答案
答案: A
先算'a' + 'b'
15. 输出什么
function*f(){varx =1vary =yieldx +1console.log(y)varz =yieldy +1console.log(z)}varg = f()console.log(g.next(10).value)console.log(g.next(100).value)console.log(g.next(1000).value)
A. 2 100 101 1000 undefined
B. 2 2 3 3 undefined
C. 2 10 11 100 1000
D. 2 10 11 100 undefined
答案
答案: A
Generator 函数的调用方法与普通函数一样,也是在函数名后面加上一对圆括号。不同的是,调用 Generator 函数后,该函数并不执行,返回的也不是函数运行结果,而是一个指向内部状态的指针对象,也就是上一章介绍的遍历器对象(Iterator Object)。
下一步,必须调用遍历器对象的next方法,使得指针移向下一个状态。也就是说,每次调用next方法,内部指针就从函数头部或上一次停下来的地方开始执行,直到遇到下一个yield表达式(或return语句)为止。
next方法可以带一个参数,该参数就会被当作上一个yield表达式的返回值
所以console.log(g.next(10).value)的10并没有用
16. 输出什么
functionf(){letx = y =1}f()console.log(x, y)
A. 1 1
B. undefined 1
C. undefined undefined
D. 1 undefined
答案
答案: B
赋值运算符顺序是从右到左,所以先执行y=1,由于没有定义y,所以这里y是全局变量
再把y赋值给x,但x是局部变量,在函数外访问不到
故答案是undefined 1
17. 输出什么
constcolorConfig = {red:true,blue:false,green:true,black:true,yellow:false,}constcolors = ["pink","red","blue"]console.log(colorConfig.colors[1])
A. true
B. false
C. undefined
D. TypeError
答案
答案: D
从左往右
18. 输出什么
conststr ="hello";console.log(!typeofstr ==="object");console.log(!typeofstr ==="string");
A. false true
B. false false
C. true true
D. true false
答案
答案: B
typeof str 返回 "string"。因此 !typeof name 返回一个布尔值 false。
false === "object" 和 false === "string" 都返回 false。
优先级汇总表
回忆一下记忆秘诀: 括点油调一成做衣 叫等位裸跳服展昭
解释
括: 括号
点: 成员访问
油:new
调:函数调用
一:一元运算符
成:乘除加减
做衣: 按位左右移
叫:比较运算符(大于 小于)
等:等于
位:按位与或
裸:逻辑与或
跳:条件运算符
服:赋值
展:展开运算符
昭:逗号
有需要了解的小伙伴可以随时点击下方链接哦
作者:aoping
链接:https://juejin.im/post/5e1eecf75188254dc022beea
来源:掘金