JavaScript 运算符与控制流程

💡 原文英文,约900词,阅读约需4分钟。
📝

内容提要

本文介绍JavaScript运算符与控制流程。运算符包括算术、递增递减、比较、逻辑和赋值运算符,并指出浮点数精度问题(如0.1+0.2不等于0.3,不应直接比较),逻辑运算符存在短路求值。控制流程分顺序、分支、循环三种结构:分支语句包括if、switch和三元表达式;循环语句包括while和for,可用break结束整个循环,continue跳过当前迭代。

🔎

延伸解读

浮点数精度问题:为何不能直接比较

文章指出,JavaScript中浮点数运算可能产生精度误差,例如0.1+0.2的结果不是0.3,而是0.30000000000000004;0.07*100的结果也不是7,而是7.000000000000001。这是因为浮点数采用二进制表示,无法精确表示某些十进制小数。因此,在比较两个浮点数是否相等时,不应使用===或==,而应考虑误差范围或转换为整数后再比较。

短路求值:逻辑运算符的实用特性

逻辑运算符存在短路求值:对于逻辑与(&&),如果第一个表达式为真,则返回第二个表达式的值;如果为假,则返回第一个表达式的值。对于逻辑或(||),如果第一个表达式为真,则返回第一个表达式的值;如果为假,则返回第二个表达式的值。这一特性常用于设置默认值,例如当某个变量可能为假值时,可以用||提供备选值。

switch语句中的break与严格匹配

switch语句使用严格相等(===)将表达式的值与case的值进行比较。如果匹配成功,则执行对应的代码块,直到遇到break语句为止。如果省略break,程序会继续执行下一个case的代码,这称为“穿透”,可能导致意外结果。因此,通常在每个case末尾添加break。如果所有case都不匹配,则执行default块中的代码。

循环控制:break与continue的区别

在循环中,break用于立即终止整个循环,通常用于已经得到结果、无需继续迭代的情况,以提高效率。continue用于跳过当前迭代的剩余部分,直接进入下一次迭代,常用于排除或跳过某些特定情况。此外,文章提到可以使用while(true)或for(;;)创建无限循环,并依靠break语句退出。

❓

Q&A

JavaScript中浮点数运算为什么会出现精度问题?如何避免?

浮点数最大精度为17位小数,但算术计算远不如整数精确。例如0.1+0.2的结果不是0.3,而是0.30000000000000004;0.07*100的结果不是7,而是7.000000000000001。因此不要直接比较两个浮点数是否相等。

JavaScript逻辑运算符的短路求值是什么?

短路求值指当有多个表达式时,如果左边的表达式已经能决定结果,就不再计算右边的表达式。逻辑与&&:第一个表达式为真则返回第二个,为假则返回第一个。逻辑或||:第一个表达式为真则返回第一个,为假则返回第二个。

JavaScript中switch语句的break有什么作用?

break用于结束switch语句。如果case中没有break,执行会继续进入下一个case。switch会将表达式的值与case值进行严格匹配(===),匹配成功则执行对应代码块并在break处停止;若无匹配则执行default。

JavaScript中break和continue在循环里有什么区别?

break结束整个循环,通常用于已经得到结果、无需继续迭代时以提高效率;continue结束当前迭代,通常用于排除或跳过某个选项。

JavaScript中如何创建无限循环并退出?

可以使用while(true)创建无限循环,并用break退出;也可以使用for(;;)创建无限循环,同样用break退出。

JavaScript中三元表达式的语法和返回值是什么?

三元表达式语法为:表达式1 ? 表达式2 : 表达式3。如果表达式1为真,返回表达式2的值;如果表达式1为假,返回表达式3的值。

🏷️

标签

➡️

继续阅读