当前位置: 首页 > news >正文

JavaScript运算符

在JavaScript开发中,运算符是编程的基础工具。它们用于执行各种操作,从简单的数学计算到复杂的逻辑判断。本文将深入探讨JavaScript中的各种运算符,包括算术运算符、比较运算符、布尔运算符、位运算符以及其他一些特殊运算符。

一、算术运算符

JavaScript提供了多种算术运算符,用于执行基本的数学运算。这些运算符包括:

  • 加法运算符x + y
  • 减法运算符x - y
  • 乘法运算符x * y
  • 除法运算符x / y
  • 指数运算符x ** y
  • 余数运算符x % y
  • 自增运算符++xx++
  • 自减运算符--xx--
  • 数值运算符+x
  • 负数值运算符-x

(一)加法运算符

加法运算符(+)是最常见的运算符,用于求两个数值的和。它还可以用于字符串的连接。

1 + 1 // 2
'a' + 'b' // "ab"
1 + 'a' // "1a"

如果一个运算子是字符串,另一个运算子是非字符串,非字符串会转成字符串,再进行连接。

(二)余数运算符

余数运算符(%)返回前一个运算子被后一个运算子除所得的余数。需要注意的是,运算结果的正负号由第一个运算子的正负号决定。

12 % 5 // 2
-1 % 2 // -1

(三)自增和自减运算符

自增和自减运算符会修改原始变量的值。它们可以放在变量之前或之后,这会影响运算的顺序。

var x = 1;
++x // 2
x++ // 2

(四)数值运算符和负数值运算符

数值运算符(+)和负数值运算符(-)可以将任何值转为数值。

+true // 1
+[] // 0
+{} // NaN

二、比较运算符

比较运算符用于比较两个值的大小,返回一个布尔值。JavaScript提供了以下比较运算符:

  • > 大于
  • < 小于
  • <= 小于或等于
  • >= 大于或等于
  • == 相等
  • === 严格相等
  • != 不相等
  • !== 严格不相等

(一)严格相等运算符

严格相等运算符(===)比较两个值是否为“同一个值”。如果两个值不是同一类型,直接返回false

1 === '1' // false

(二)相等运算符

相等运算符(==)比较两个值是否相等,会进行类型转换。

1 == '1' // true

(三)比较字符串

字符串按照字典顺序进行比较。

'cat' > 'dog' // false

三、布尔运算符

布尔运算符用于将表达式转为布尔值。主要的布尔运算符包括:

  • 取反运算符!
  • 且运算符&&
  • 或运算符||
  • 三元条件运算符?:

(一)取反运算符

取反运算符(!)用于将布尔值变为相反值。

!true // false
!false // true

(二)且运算符

且运算符(&&)用于多个表达式的求值。如果第一个运算子的布尔值为true,则返回第二个运算子的值;否则返回第一个运算子的值。

't' && 'f' // "f"
'' && 'f' // ""

(三)或运算符

或运算符(||)用于多个表达式的求值。如果第一个运算子的布尔值为true,则返回第一个运算子的值;否则返回第二个运算子的值。

't' || 'f' // "t"
'' || 'f' // "f"

(四)三元条件运算符

三元条件运算符(?:)用于根据条件返回不同的值。

't' ? 'hello' : 'world' // "hello"
0 ? 'hello' : 'world' // "world"

四、位运算符

位运算符用于对数字的二进制表示进行操作。主要的位运算符包括:

  • 按位非~
  • 按位与&
  • 按位或|
  • 按位异或^
  • 按位移位<<>>

(一)按位非

按位非运算符(~)会将数字转为32位二进制整数,然后反转每一位。

~5 // -6

(二)按位与

按位与运算符(&)对两个数的每一位执行按位与运算。

12 & 10 // 8

(三)按位或

按位或运算符(|)对两个数的每一位执行按位或运算。

12 | 10 // 14

(四)按位异或

按位异或运算符(^)对两个数的每一位执行按位异或运算。

12 ^ 10 // 6

(五)按位移位

按位移位运算符(<<>>)用于将数字的二进制表示向左或向右移动指定的位数。

2 << 2 // 8
16 >> 1 // 8

五、其他运算符

(一)void 运算符

void 运算符用于执行一个表达式,然后返回undefined

void 0 // undefined

(二)逗号运算符

逗号运算符用于对两个表达式求值,并返回后一个表达式的值。

'a', 'b' // "b"

六、真题解答

下面代码中,a 在什么情况下会执行输出语句打印 1

var a = ?;
if(a == 1 && a == 2 && a == 3){console.log(1);
}

参考答案

方法一:利用 toString() 方法

var a = {i: 1,toString() {return a.i++;}
}
if (a == 1 && a == 2 && a == 3) {console.log('1');
}

方法二:利用 valueOf() 方法

var a = {i: 1,valueOf() {return a.i++}
}
if (a == 1 && a == 2 && a == 3) {console.log('1');
}

相关文章:

  • DAY 28 类的定义和方法
  • 布隆过滤器介绍及其在大数据场景的应用
  • linux-软件的安装与部署、web应用部署到阿里云
  • 【高斯拟合最终篇】Levenberg-Marquardt(LM)算法
  • Java Records:简洁的数据建模新方式
  • 类方法_静态方法_实例方法
  • 算法:分治法
  • Python训练营打卡Day28(2025.5.17)
  • 小白学习java第19天(下):spring
  • css 中 content: “\e6d0“ 怎么变成图标的?
  • 实验八 基于Python的数字图像问题处理
  • JDBC实现模糊、动态与分页查询的详解
  • 论文解读:ICLR2025 | D-FINE
  • LangGraph(四)——加入人机交互控制
  • 开源项目实战学习之YOLO11:12.3 ultralytics-models-sam-encoders.py源码分析
  • DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态
  • Vue3——父子组件通信
  • Android7 Input(七)App与input系统服务建立连接
  • 灵光一现的问题和常见错误1
  • 搭建基于Windows平台的http文件服务(miniserve+filebrowser+nssm)
  • 北方首场高温将进入鼎盛阶段,江南华南多地需警惕降雨叠加致灾
  • 俄媒:俄乌伊斯坦布尔谈判将于北京时间今天17时30分开始
  • 临港新片区将新设5亿元启航基金:专门投向在临港发展的种子期、初创型企业
  • 杨文庄当选中国人口学会会长,曾任国家卫健委人口家庭司司长
  • 兰州大学教授安成邦加盟复旦大学中国历史地理研究所
  • 从普通人经历中发现历史,王笛解读《线索与痕迹》