JavaScript常见的运算符优先级面试题

您所在的位置:网站首页 javascript运算符的优先级最高 JavaScript常见的运算符优先级面试题

JavaScript常见的运算符优先级面试题

2024-01-16 11:42| 来源: 网络整理| 查看: 265

文章目录 小试牛刀前言基础关联性参考文献 实际应用的坑&&与||三元运算符和==加减乘除和取模前置递减、前置递增和&&typeof和三元运算符加减乘除和大小于&&和三元运算符 总结

小试牛刀

来看看这样一道题目

console.log(true || false && false)

返回的是什么?

到底是true还是false ?

如果你对这道题目是一知半解的,那么这篇文章很适合你!

前言

运算符优先级的知识点真的很重要,例如如何判断 && 和 || 的运算优先级。如果你不能掌握这些基础知识点。你甚至算不上一个初级程序员。

在学校或是培训机构,老师只会告诉你,() 括号运算符的优先级最高。在不能判断运算符优先级顺序的时候,使用 () 。这确实是个好办法,但作为有上进心的有为青年,一定要学会判断运算符优先级。

基础

计算机编译程序是从左往右的,但是运算符却不尽然。这里有一个知识点,叫做关联性。

关联性

关联性是运算符优先级里很重要的一个概念,它决定了拥有相同优先级的运算符的执行顺序。

通常有三种关联性,分别为左关联,右关联和无关联

a OP b OP c; 左关联(左到右)相当于把左边的子表达式加上小括号(a OP b) OP c,右关联(右到左)相当于a OP (b OP c)

参考文献

取自 MDN web docs

优先级运算类型关联性运算符21圆括号n/a(不相关)( … )20成员访问从左到右… . …需计算的成员访问从左到右… [ … ]new (带参数列表)n/anew … ( … )函数调用从左到右… ( … )可选链(Optional chaining)从左到右?.19new (无参数列表)从右到左new …18后置递增(运算符在后)n/a  … ++后置递减(运算符在后)… --17逻辑非从右到左! …按位非~ …一元加法+ …一元减法- …前置递增++ …前置递减-- …typeoftypeof …voidvoid …deletedelete …awaitawait …16幂从右到左… ** …15乘法从左到右  … * …除法… / …取模… % …14加法从左到右  … + …减法… - …13按位左移从左到右…  …无符号右移… >>> …12小于从左到右… = …in… in …instanceof… instanceof …11等号从左到右  … == …非等号… != …全等号… === …非全等号… !== …10按位与从左到右… & …9按位异或从左到右… ^ …8按位或从左到右… | …7逻辑与从左到右… && …6逻辑或从左到右… || …5空值合并从左到右… ?? …4条件运算符从右到左… ? … : …3赋值从右到左… = …… += …… -= …… **= …… *= …… /= …… %= …… = …… >>>= …… &= …… ^= …… |= …… &&= …… ||= …… ??= …2yield从右到左yield …yield*yield* …1展开运算符n/a... …0逗号从左到右… , … 实际应用的坑 &&与||

看如下代码

console.log(true || false && false) // true

这是一个很经典的例子,如果我们不知道 && 的优先级比 || 高,我们肯定以为返回值是false。

三元运算符和== let value = "3" let index = 3 let flag = value == index ? 1 : 2 console.log(flag) // 1

等号(==)和全等号(===)的优先级是比三目运算符更高的。所以要先算前面的value == index,返回值是true。最终结果为1

如果三目运算符的优先级比等号高,那结果将会完全相反。返回值将会是false

加减乘除和取模 console.log(1 + 2 * 3 % 4) // 3

先算乘除和取模再算加减。

tip:乘除和取模的运算符优先级是一样的,所以从左到右开始计算。

前置递减、前置递增和&& let number = 1 console.log(--number && 7) // 0 let number2 = 0 console.log(++number2 && 7) // 7

前置递减、前置递增的运算符优先级比&&高,先算递减

typeof和三元运算符 let flag = false console.log(typeof flag) // boolean console.log(typeof flag ? '2' : 1) // 2

typeof的计算运算级比三元运算符高,所以返回的是2。

加减乘除和大小于 let number = 3 console.log(number + 4 > 6) // true console.log(number * 2 > 5) // true

加减乘除的运算符优先级比大小于高,先计算加减乘除

&&和三元运算符 console.log(1 && 0 ? 3 : 2) // 2

&&的运算级比三元运算符更高,先计算&&

总结

运算符优先级是很大一个模块,它的难度非常高!

大家一定要多花时间研究研究。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3