美文网首页Java
教你读懂js运算符优先级

教你读懂js运算符优先级

作者: 即将秃头的Java程序员 | 来源:发表于2020-01-17 17:55 被阅读0次

    题记

    如果你能快速准确的回答以下问题,那么可以直接跳过

    先祭出大杀招: 括点油调一成做衣 叫等位裸跳服展昭

    断句:括点油,调一成,做衣; 叫等位,裸跳,服展昭

    大家可以想象这样一个场景来辅助记忆:有一个服装店的老板叫展昭,我们要去他家做衣服,于是括了点油,讲价到一折,展昭很不爽,叫我们等位,不相等怎么办,表演一个裸跳(因为我们的衣服还没做好,现在是没穿衣服的哟)来说服展昭

    解释

    括: 括号

    点: 成员访问

    油: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

    调:函数调用

    一:一元运算符

    成:乘除加减

    做衣:      按位左右移

    叫:比较运算符(大于 小于)

    等:等于

    位:按位与或

    裸:逻辑与或

    跳:条件运算符

    服:赋值

    展:展开运算符

    昭:逗号

    有需要了解的小伙伴可以随时点击下方链接哦

    《2020年Java架构最全面系统面试资料》

    作者:aoping

    链接:https://juejin.im/post/5e1eecf75188254dc022beea

    来源:掘金

    相关文章

      网友评论

        本文标题:教你读懂js运算符优先级

        本文链接:https://www.haomeiwen.com/subject/kjqhzctx.html