首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么要先执行JavaScript中优先级较低的运算符?

在JavaScript中,运算符的优先级决定了表达式中各个运算符的执行顺序。优先级较低的运算符会在优先级较高的运算符之后执行。这种设计是为了保证表达式的正确性和一致性。

首先,JavaScript遵循数学运算的优先级规则,例如乘法和除法的优先级高于加法和减法。这意味着在一个表达式中,乘法和除法会先于加法和减法执行。这样可以确保数学运算的正确性,避免出现错误的结果。

其次,优先级较低的运算符通常是一元运算符,例如逻辑非(!)和递增/递减(++/--)运算符。这些运算符的优先级较低是为了确保它们在其他运算符之后执行,以便正确地计算表达式的值。

另外,JavaScript还有一些特殊的运算符,例如逻辑运算符(&&和||)和条件运算符(?:)。这些运算符的优先级较低是为了确保它们在其他运算符之后执行,以便正确地判断条件和执行相应的逻辑。

总结起来,JavaScript中先执行优先级较低的运算符是为了保证表达式的正确性和一致性。通过遵循数学运算的优先级规则和确保一元运算符在其他运算符之后执行,可以得到预期的结果。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JavaScriptPromise里代码为什么比setTimeout执行

所以,我们首先应该形成一个感性认知:一个 JavaScript 引擎会常驻于内存,它等待着我们(宿主)把 JavaScript 代码或者函数传递给它执行。...在 ES3 和更早版本JavaScript 本身还没有异步执行代码能力,这也就意味着,宿主环境传递给 JavaScript 引擎一段代码,引擎就把代码直接顺次执行了,这个任务也就是宿主发起任务...当然,实际代码并没有这么简单,还有判断循环是否结束、宏观任务队列等逻辑,这里为了方便你理解,我就把这些都省略掉了。 这里每次执行过程,其实都是一个宏观任务。...在宏观任务JavaScript Promise 还会产生异步代码,JavaScript 必须保证这些异步代码在一个宏观任务完成,因此,每个宏观任务又包含了一个微观任务队列: 有了宏观任务和微观任务机制...在每个宏任务,分析有多少个微任务; 3. 根据调用次序,确定宏任务微任务执行次序; 4. 根据宏任务触发规则和调用次序,确定宏任务执行次序; 5.

83820

JavaScript执行(一):Promise里代码为什么比setTimeout执行

所以,我们首先应该形成一个感性认知:一个 JavaScript 引擎会常驻于内存,它等待着我们(宿主)把 JavaScript 代码或者函数传递给它执行。...在 ES3 和更早版本JavaScript 本身还没有异步执行代码能力,这也就意味着,宿主环境传递给 JavaScript 引擎一段代码,引擎就把代码直接顺次执行了,这个任务也就是宿主发起任务...当然,实际代码并没有这么简单,还有判断循环是否结束、宏观任务队列等逻辑,这里为了方便你理解,我就把这些都省略掉了。 这里每次执行过程,其实都是一个宏观任务。...在宏观任务JavaScript Promise 还会产生异步代码,JavaScript 必须保证这些异步代码在一个宏观任务完成,因此,每个宏观任务又包含了一个微观任务队列: 有了宏观任务和微观任务机制...在每个宏任务,分析有多少个微任务; 3. 根据调用次序,确定宏任务微任务执行次序; 4. 根据宏任务触发规则和调用次序,确定宏任务执行次序; 5.

58610

JavaScriptJavaScript 运算符 ⑤ ( 运算符优先级 )

一、JavaScript 运算符优先级 1、运算符优先级 概念 JavaScript 运算符 是有 " 优先级 " , " 运算符优先级 " 决定 一个表达式 多个 运算符 执行顺序 ; 一个...表达式 , 有多个运算符 , " 运算符优先级 " 决定了 哪个 运算符 首先与操作数结合 ; 运算符优先级不同 : 优先级较高运算符优先级较低运算符 与 操作数 结合 ; 运算符优先级相同...: 运算符优先级相同 , 则根据运算符结合性 判定 哪个与 操作数 结合 ; 小括号 优先级最高 , 可以直接改变 运算符 结合性 ; 一元运算符 优先级 仅次于 小括号 ; 2、运算符优先级...列举 下面的 运算符 优先级 按照 从上到下 顺序 , 优先级由高到低 ; JavaScript 运算符 优先级顺序 : 括号运算符 : 小括号运算符 () 可以直接 用于改变 正常 运算符...(2 * 3 == 6) && false 运算符优先级 : 小括号 运算符 优先级最高 , (2 * 3 == 6) 运算符是结合在一起进行运算 ; 2 * 3 == 6 , 算术运算符

14310

【Java 进阶篇】JavaScript二元运算符详解

JavaScript是一门多用途编程语言,它支持各种运算符,包括二元运算符。二元运算符用于执行两个操作数之间操作,这两个操作数通常是变量、值或表达式。...在本篇博客,我们将详细探讨JavaScript二元运算符,包括它们种类、用法以及示例。 什么是二元运算符? 在JavaScript,二元运算符是一种需要两个操作数运算符。..."成年人" : "未成年人"; // message 值是 "成年人" 运算符优先级JavaScript,不同类型运算符有不同优先级。如果表达式中有多个运算符,它们将按照一定顺序执行。...位移运算符 >、>>>:从左到右具有较低优先级。 按位与 &:从左到右具有较低优先级。 按位异或 ^:从左到右具有较低优先级。 按位或 |:从左到右具有较低优先级。...比较运算符 、=:从左到右具有较低优先级。 相等运算符 ==、!=、===、!==:从左到右具有较低优先级。 逻辑与 &&:从左到右具有较低优先级

20910

前端实用操作符,一些写代码骚操作

操作符 null传导符(或链判断操作符) 在js,如果读取对象里某个属性时,往往需要判断对象是否存在,以防止报错。...双否定位操作符优势在于它执行相同操作运行速度更快。...还可以用在箭头函数避免传值泄漏,箭头函数,允许在函数体不使用括号来直接返回值。...11、js操作符优先级 JavaScript 运算符优先级,是描述在计算机运算计算表达式时执行运算先后顺序。执行具有较高优先级运算,然后执行较低优先级运算。...例如,我们常说执行相乘和除,再执行加减运算。 ? 圆括号用于改变由运算符优先级确定计算顺序。这就是说,计算完圆括号内表达式,然后再将它值用于表达式其余部分。

79710

JavaScript 数据类型与运算符(下)

JavaScript 运算符之赋值运算符 赋值运算符(Assignment Operators)用于给变量赋值。 最常见赋值运算符,当然就是等号(=)。...快速计算位移方案 左移运算符就是*2n次方(n代表位移次数) 右移运算符就是/2n次方 (n代表位移次数,不同时候,出现小数时取整) 位运算演算过程 在移位运算过程,符号位始终保持不变 如果右侧空出位置...3 十进制转为二进制 采用"除2取余,逆序排列"法: 假设我们现在需要将42转为二进制,那我们怎么做呢,如下图所示: JavaScript 运算符优先级 JavaScript 各种运算符优先级别(...优先级运算符执行优先级运算符执行。...: 三元运算符 如果多个运算符混写在一起,常常会导致令人困惑代码,所以一般我们可以通过多条语句完成,记住所有运算符优先级,是非常难,也是没有必要

42930

前端程序员经常忽视一个JavaScript面试题

,特地从头到尾来分析一次答案,这道题经典之处在于它综合考察了面试者JavaScript综合能力,包含了变量定义提升、this指针指向、运算符优先级、原型、继承、全局变量污染、对象属性及原型属性优先级等知识...我们来看看为什么,可参考(1)关于Javascript函数声明和函数表达式 (2)关于JavaScript变量提升 在Javascript,定义函数有两种类型 函数声明 // 函数声明 function...执行后把全局getName函数给重写了一次,所以结果就是Foo()执行重写那个getName函数 第五问 第五问new Foo.getName();此处考察是JS运算符优先级问题,我觉得这是这题灵魂所在...所以直接执行new,当然也可能有朋友会有疑问为什么遇到()不函数调用再new呢,那是因为函数调用(17)比new有参数列表(18)优先级低 .成员访问(18)->new有参数列表(18) 所以这里实际上将...首先new有参数列表(18)跟点优先级(18)是同级,同级的话按照从左向右执行顺序,所以执行new有参数列表(18)再执行优先级(18),最后再函数调用(17) new有参数列表(18)->.

28210

前端同学经常忽视一个 JavaScript 面试题

,特地从头到尾来分析一次答案,这道题经典之处在于它综合考察了面试者JavaScript综合能力,包含了变量定义提升、this指针指向、运算符优先级、原型、继承、全局变量污染、对象属性及原型属性优先级等知识...我们来看看为什么,可参考(1)关于Javascript函数声明和函数表达式 (2)关于JavaScript变量提升 在Javascript,定义函数有两种类型 函数声明 // 函数声明 function...Foo执行后把全局getName函数给重写了一次,所以结果就是Foo()执行重写那个getName函数 第五问 第五问new Foo.getName();此处考察是JS运算符优先级问题,我觉得这是这题灵魂所在...所以直接执行new,当然也可能有朋友会有疑问为什么遇到()不函数调用再new呢,那是因为函数调用(17)比new有参数列表(18)优先级低 .成员访问(18)->new有参数列表(18) 所以这里实际上将...首先new有参数列表(18)跟点优先级(18)是同级,同级的话按照从左向右执行顺序,所以执行new有参数列表(18)再执行优先级(18),最后再函数调用(17) new有参数列表(18)->.

46210

关于一道面试题【字符串 1 + (5 - 2) * 3,怎么算出结果为10,eval除外】

因为eval有一系列问题: eval会改变当前作用域,除非函数直接调用,并且是eval本身执行 eval可能会造成xss攻击,除非你对其中字符串特别放心 当时只是觉得可以使用正则匹配运算符,然后使用递归计算...如果我拿个’1 + (5 - 2) * 3’这个式子我是怎么想: 看成 1 + x * 3 算出x,x计算就需要匹配括号,这个倒不是很难 计算出x之后,替换成 1 + 3 * 3 之后按照/%*优先级大于...+-,匹配计算出 3 * 3 替换成 1 + 9 最后得出 10 讲白了就是有括号,计算括号算是,然后进行结果替换之后再进行后面的运算,整体而言就是一系列‘递归 + 匹配’。...,即不包含括号计算,计算*/%运算符,然后计算+- /** * 第一优先级运算 * 这里第一优先级为'%/*' * @param string str * @return number...为什么不要使用eval 以eval()和newFunction()执行JavaScript代码 Js代替eval方法

1K100

这道JS经典面试题不要背,今天带你彻底搞懂它!

Foo().getName() 和第一问相比看似只多了个括号,实际考察内容完全不一样。 我们复习一下 JS 运算符优先级,这是下来全部解题基础。 -> MDN - 运算符优先级汇总表。...5. new Foo.getName() 乍一看以为是考察 new 关键字 了,其实并没有,它还是考察了上面提到运算符优先级,根据优先级我们可以得出,Foo.getName() 是会执行执行完只是输出了第一问结果...6. new Foo().getName() 这里开始考察 new 关键字 概念,但我们还是先说说这一问涉及运算符优先级问题,可能你看过其它文章解析这一问时候会说等价于 (new Foo())....为什么第 5 问是执行 Foo.getName() 而这一问却是执行 new Foo() 呢?...这是因为 new 运算在优先级上有两种形式: 带参数列表: new … ( … ) 优先级 18 无参数列表: new … 优先级 17 如果优先级不同那么按优先级最高运算符执行,不用考虑结合性。

45300

c++基础之表达式

表达式括号无视运算优先级与结合律规则,如果表达式中有括号,运算括号内容。...表达式最终值取决与子表达式结合方式,在计算表达式值时,先看运算符优先级处理优先级子表达式,而优先级相同情况下,则由其结合律规则决定 3 + 4 * 5 //根据运算符优先级,乘法高于加法...对于没有指定执行顺序运算符来说,如果表达式指向并修改了同一个对象,将会引发错误并产生未定义行为,例如 int i = 0; int j = i + ++i; 根据结合律,会计算i和 ++i但是不确定是该计算...赋值运算符满足右结合律,对于多重赋值语句中每一个对象,它类型或者与右边对象相同,或者可以又右边对象类型转化得到 赋值运算符优先级较低 赋值运算符也包括复合赋值运算符,例如 += 、-=、*=...= v.end() && *pbeg >= 0) { cout << *pbeg++ << endl; } 这里后置递增运算符优先级大于解引用优先级,所以这里等价于 *(pbeg++),

79310

【前端】:变量提升、this绑定、 优先级与关联性

JS 引擎在执行代码之前会对代码进行编译,这一阶段会优先处理包括变量、函数在内所有声明(提升就发生在这个时候)。 JavaScript 仅提升声明,而不提升初始化。...运算符优先级与关联性 3.1. 优先级是什么? 运算符优先级决定了表达式运算执行先后顺序,优先级运算符最先被执行。...运算符是由“操作符和操作数”组成,操作符在位置上紧挨着操作数,因此对于优先级直观理解就是,对于同一个操作数,它周围哪个操作数更加“吸引”它,它就跟那个操作符“优先”计算,这就是操作符优先级由来...关联性决定了拥有相同优先级运算符执行顺序。...几道笔试题 题目01: 题目02: 正确答案:A 题目03: 题目04: 参考: 《你不知道 JavaScript(上卷)》 《自制编程语言》 运算符优先级: https://developer.mozilla.org

46020

❤万字长文JS全网最细笔记2️⃣(全网最强,建议收藏)❤

**JavaScript中常用运算符有: 算数运算符 递增和递减运算符 比较运算符 逻辑运算符 赋值运算符 8.1.1、算数运算符     算术运算使用符号,用于执行两个变量或值算术运算...所以在JavaScript不要直接判断两个浮点数是否相等 !...在 JavaScript ,递增(++)和递减( – )既可以放在变量前面,也可以放在变量后面。...== 、 6 逻辑运算符 &&后|| 7 赋值运算符 = 8 逗号运算符 ,     总的来说就是: 一元运算符里面的逻辑非优先级很高。...逻辑与比逻辑或优先级高 九、流程控制 9.1、 流程控制概念     在一个程序执行过程,各条代码执行顺序对程序结果是有直接影响。很多时候我们通过控制代码执行顺序来实现我们完成功能。

71640

前端知识点杂集

我们复习一下 JS 运算符优先级,这是下来全部解题基础,MDN 汇总表 -> 链接在这里。...5. new Foo.getName() 乍一看以为是考察 new 关键字 了,其实并没有,它还是考察了上面提到运算符优先级,根据优先级我们可以得出,Foo.getName() 是会执行执行完只是输出了第一问结果...6. new Foo().getName() 这里开始考察 new 关键字 概念,但我们还是先说说这一问涉及运算符优先级问题,可能你看过其它文章解析这一问时候会说等价于 (new Foo())....为什么第 5 问是执行 Foo.getName() 而这一问却是执行 new Foo() 呢?...这是因为 new 运算在优先级上有两种形式,一种是带参数列表: new … ( … ) 优先级 18,另一种是无参数列表: new … 优先级 17,如果优先级不同那么按优先级最高运算符执行,不用考虑结合性

20620

C#运算符执行顺序对照表

C#运算符执行顺序对照表:在线查看C#运算符执行优先级别 窍门: Ctrl+F 快速查找 ---- C#运算符优先级,是描述在计算机计算表达式时执行运算先后顺序。...执行具有较高优先级运算,然后执行较低优先级运算。 例如,我们常说执行相乘和除,再执行加减运算。...、~ 这一级中都是单元运算符,除了其中那一对特殊具有改变任何运算优先级括号 这此可以看出,在定义表达式,那些单元运算符优先级是很高,可能是因为它们都直接作用于操作数吧 只有两个单元运算符优先级不在第一级...这一级是两个特殊位操作符,>,它们是所有二元操作符除常规运算符优先级最高了,可能是因为与比较运算符、逻辑运算符比起来,这一组操作符进行还是数值计算 比较运算符,包括、<=、...就是那两个最后单元运算符后缀版++、-- 它们出现就是为了做为那两个前缀版==、--补充(那两个优先级太高了,人们需要两个优先级不那么高) 以方便设计表达式,所以这两个优先级当然排在最后了

43520

前端面试题“七连击”(一)

JavaScript 解释器存在一种变量声明被提升机制,也就是说函数声明会被提升到作用域最前面,即使写代码时候是写在最后面,也还是会被提升至最前面。...);执行了Foo函数,然后调用Foo函数返回值对象getName属性函数。...下面是JS运算符优先级表格,从高到低排列。...可参考MDN运算符优先级 所以new Foo.getName();优先级相当于下面的样子: ● 点优先级比new无参数列表优先级高 ● 当点运算完后又因为有个括号(),此时就是变成new有参数列表...,所以直接执行new,当然也可能有朋友会有疑问为什么遇到()不函数调用再new呢,那是因为函数调用比new有参数列表优先级低 所以这里实际上将getName函数作为了构造函数来执行,遂弹出2。

54570

JavaScript 教程「4」:操作符

JavaScript ,主要有以下几类常见运算符: 算数运算符 递增递减运算符 比较运算符 逻辑运算符 赋值运算符 以下就分别来看看,这些运算符都是怎么用。...而两者区别在于: 使用前置时:自加/减 1,然后再返回结果。 使用后置式:返回原值,然后再自加/减 1。...运算符优先级决定了我们表达式运算执行先后顺序,优先级越高,则执行顺序越靠前。...常见运算符优先级分级如下表。总的来说,在开发过程要尽量避免复杂表达式,如果实在是要用,也可以多利用小括号来提高代码可读性,防止因疏忽代码运算执行先后顺序而导致程序结果错误。...到这里,我们已经学习了 JavaScript 变量、数据类型、运算符、注释、输入输出。到这里我们应该可以根据所需知识写一些小 demo,接下来就继续去看看流程控制相关内容吧。

30320
领券