重学前端
程劭非(winter)
前手机淘宝前端负责人
105348 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 57 讲
开篇词+学习路线+架构图 (3讲)
重学前端
15
15
1.0x
00:00/00:00
登录|注册

JavaScript语法(四):新加入的**运算符,哪里有些不一样呢?

按位或表达式
按位异或表达式
按位与表达式
右值表达式
左值表达式
总结JavaScript中所有的运算符优先级和结合性
逻辑表达式的短路特性
相等表达式中的设计失误
关系表达式的特性
乘方表达式的结合性
条件表达式
逻辑或表达式
逻辑与表达式
位运算表达式
相等表达式
关系表达式
移位表达式
加法表达式
乘法表达式
乘方表达式
一元运算表达式
更新表达式
条件表达式
赋值表达式
总结
运算符优先级和结合性
表达式的结构
JavaScript语法

该思维导图由 AI 生成,仅供参考

你好,我是 winter。
上一节课我们已经给你介绍了表达式的一些结构,其中关于赋值表达式,我们讲完了它的左边部分,而留下了它右边部分,那么,我们这节课一起来详细讲解。
在一些通用的计算机语言设计理论中,能够出现在赋值表达式右边的叫做:右值表达式(RightHandSideExpression),而在 JavaScript 标准中,规定了在等号右边表达式叫做条件表达式(ConditionalExpression),不过,在 JavaScript 标准中,从未出现过右值表达式字样。
JavaScript 标准也规定了左值表达式同时都是条件表达式(也就是右值表达式),此外,左值表达式也可以通过跟一定的运算符组合,逐级构成更复杂的结构,直到成为右值表达式。
关于这块的知识,我们有时会看到按照运算符来组织的讲解形式。
这样讲解形式是因为:对运算符来说的“优先级”,如果从我们语法的角度来看,那就是“表达式的结构”。讲“乘法运算的优先级高于加法”,从语法的角度看就是“乘法表达式和加号运算符构成加法表达式”。
对于右值表达式来说,我们可以理解为以左值表达式为最小单位开始构成的,接下来我们就来看看左值表达式是如何一步步构成更为复杂的语法结构。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

JavaScript语法新增了多种运算符和表达式类型,丰富了表达式组合方式,同时也需要注意它们的优先级和特性。新增的运算符包括更新表达式、一元运算表达式、乘方表达式、乘法表达式、加法表达式、移位表达式、关系表达式、相等表达式和位运算表达式。这些运算符的组合形成了不同的表达式类型,如逻辑与表达式、逻辑或表达式、条件表达式等。逻辑表达式具有短路特性,而条件表达式可以忽略后面表达式的计算。文章还提到了JavaScript中所有的运算符优先级和结合性,为读者提供了全面的了解。文章内容详实,适合开发者快速了解JavaScript语法中新增的运算符和表达式类型,以及它们的特性和优先级。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《重学前端》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(26)

  • 最新
  • 精选
  • windliang
    -1 >> 1,-1 的补码是 1111 1111 ... 1111 1111 ,32 个 1,有符号右移,高位补 1,所以还是 1111 1111 ... 1111 1111 ,32 个 1,所以答案依旧是 -1。 -1 >>> 1,-1 的补码是 1111 1111 ... 1111 1111 ,32 个 1,无符号右移,高位补 0,所以是 0111 1111... 1111 1111 ,31 个 1,代表 2 ** 31 - 1= 2147483648 - 1 = 2147483647 。 「在 JavaScript 中,二进制操作整数并不能提高性能」我觉得原因就是 js 数字不管整数还是小数都用 IEEE 754 浮点数标准。所以没有所谓的补码之说,也只有在进行位操作的时候,js 进行转换而已。 之前总结了一篇补码的文章,分享一下. https://mp.weixin.qq.com/s/uvcQHJi6AXhPDJL-6JWUkw

    作者回复: 优秀。

    2019-06-28
    3
    20
  • 冬Don
    为什么 [undefined] == 0 是 true, [false] == 0是false呢

    作者回复: [undefined].toString(); [false].toString(); 这么一看就知道为什么了。 不过不同类型的双等号比较是JS里的糟粕,你学了也没什么用处。

    2019-11-14
    4
  • 渴望做梦
    老师,这篇文章里面每个表达式介绍的时候都说是由上一个表达式构成的,对此我不是很理解,比如一元运算表达式是有更新表达式和一元运算符构成的,但是 typeof a 我怎么看也没看出来哪有更新表达式

    作者回复: a本身就是一个更新表达式

    2019-07-31
    2
    1
  • Geeker
    比如本章和前一章对应标准中的 “12 ECMAScript Language: Expression”这一章,但有些内容不是很好懂,可能和标准的行文结构和规范有关,希望老师有时间可以稍做调拨,谢谢!

    作者回复: ES2018写的比较类似伪代码了,我这边还是从前端的理解角度出发来讲的。 你具体哪里不懂,可以发出来看看。

    2019-04-09
    1
  • AbyssKR
    “逻辑与表达式和逻辑或表达式”一节中,第二个例子 false && undefined; 的结果为 false
    2019-04-09
    6
    72
  • 阿成
    优先级由高到低: 1 () 2 ./[] 左 2 new MemberExpression Arguments 3 new MemberExpression 右 4 () 函数调用 左 5 ++/-- 6 +/-/~/!/delete/typeof/void/await 右 7 ** 右 8 *///% 左 9 +/- 左 10 << >> >>> 左 11 < > <= >= instance of in 左 12 == === != !== 左 13 & 左 14 ^ 左 15 | 左 16 && 左 17 || 左 18 ?: 右 19 = 右 20 , 左 不过MDN上的一份整理是这样的:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Operator_Precedence 主要不同的地方集中在: 1. 函数调用与New Expression的优先级顺序(上一课文中有一句不是很理解:而 Call Expression 就失去了比 New Expression优先级高的特性,这是一个主要的区分) 2. ++/-- 前置和后置的优先级顺序(MDN上前置后置优先级是不同的) 3. 缺少了 yield/yield*/...这三个运算符
    2019-04-08
    1
    31
  • Geeker
    标准里有些东西还是看不太懂,如果可以的话,希望老师在答疑的时候稍微讲解一下如何看懂标准
    2019-04-09
    7
  • Geeker
    评论不能发图片,我把不太明白的地方截图发到了语雀: https://cdn.nlark.com/yuque/0/2019/jpeg/119718/1554814331032-assets/web-upload/a51218b6-cd8a-4ac8-b71f-f8f6dbfeab36.jpeg 麻烦老师移步看一下,谢谢。
    2019-04-09
    4
  • 依韵
    false && undefined 值为false
    2019-07-19
    2
    3
  • 白嗣
    false && undefined; // false
    2019-05-20
    3
收起评论
显示
设置
留言
26
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部