JavaScript 常用运算符详解与行为规范
本文系统梳理 JavaScript 中的核心运算符,涵盖 delete 与 void 的特殊用法、一元及位运算、加减乘除取模等算术行为,以及逻辑、关系和等性比较规则。重点解析各类运算符在数值、字符串、对象及特殊值(如 NaN、Infinity)下的类型转换与返回值机制,帮助开发者避免常见陷阱。
一元运算符:delete 与 void
1、delete 运算符:用于移除对象中已定义的属性或方法引用。示例如下:
var o=new Object;
o.name="superman";
alert(o.name); //输出 "superman"
delete o.name;
alert(o.name); //输出 "undefined"
执行 delete 后,属性被移除并返回 undefined(即未初始化变量的默认值)。注意,delete 无法删除 ECMAScript 规范定义的内置属性和方法。
例如,尝试执行以下代码会引发错误:delete o.toString();
2、void 运算符:无论传入何值,该运算符始终返回 undefined。它主要用于防止表达式产生意外输出。
例如,在 HTML 页面中使用 <a href="javascript:window.open('about:blank')">Click Me</a>
点击该链接后,浏览器可能显示 "[object]"(IE)、"[object Window]"(Firefox)或保持链接状态(Chrome)。这是因为 window.open() 返回了新窗口的引用,该对象被隐式转换为字符串显示。为避免此现象,可使用 void 运算符调用 window.open():
<a href="javascript:void(window.open('about:blank'))">Click Me</a>
这使得 window.open() 的调用结果为 undefined,从而不会在浏览器中显示任何内容。
3、前增量/前减量运算符:用法与 C 语言一致。运算在表达式计算前执行,例如 ++i; --i 。
4、后增量/后减量运算符:后缀形式在包含它们的表达式计算完成后才执行增量或减量,例如 i++; i-- 。
一元加法与减法
5、一元加法和一元减法
一元加法对数字无实际影响: var iNum=25; iNum=+iNum; alert(iNum); //输出25
当一元加法作用于字符串时,其行为类似于 parseInt(),但主要区别在于处理以 "0x" 开头的字符串(表示十六进制)时,一元运算符会将其转换为十进制数值。因此,对 "010" 使用一元加法结果仍为 10,而对 "0xB" 则转换为 11。
var sNum="25"; alert(typeof sNum); //输出 "string"
var iNum=+sNum; alert(typeof iNum); //输出 "number"
一元减法用于对数值求负,其行为与一元加法类似,会将字符串转换为近似数字并取反。
var sNum = "25"; alert(typeof sNum); //输出 "string"
var iNum = -sNum; alert(iNum); //输出"-25"
alert(typeof iNum); //输出 "number"
二、位运算符:与二进制有关的一系列运算符,实际操作中貌似不怎么用,就略过了……
位运算符
位非运算符由波浪号(~)表示。
位与运算符由和号(&)表示。
位或运算符由竖线(|)表示。
位异或运算符由脱字符(^)表示。
左移运算符由两个小于号表示(<<)。
有符号右移运算符由两个大于号(>>)表示。
无符号右移由三个大于号(>>>)表示。
三、Boolean运算符
布尔运算符:逻辑非、与、或
布尔运算符包括非、与和或三种。
1、逻辑非,用感叹号(!)表示。该运算符常用于控制循环。与逻辑或和逻辑与不同,逻辑非始终返回布尔值。其行为如下:
若运算数为对象,返回 false。
若运算数为数字 0,返回 true。
若运算数为 0 以外的任何数字,返回 false。
若运算数为 null,返回 true。
若运算数为 NaN,返回 true。
若运算数为 undefined,则发生错误。
示例: var b = true;
while(!b){ …… }
2、逻辑与运算符,用双和号(&&)表示。仅当两个操作数均为 true 时,结果为 true:true && true = true;
逻辑与的操作数可以是任意类型,不仅限于布尔值。若操作数非原始布尔值,结果未必为布尔值:
若一个操作数是对象,另一个是布尔值,返回该对象。
若两个操作数均为对象,返回第二个对象。
若一个操作数是 null,返回 null。
若一个操作数是 NaN,返回 NaN。
若一个操作数是 undefined,则发生错误。
若第一个操作数为 false,无论第二个操作数为何值,结果不可能为 true。
3、逻辑或运算符,用双竖线(||)表示。仅当两个操作数均为 false 时,结果为 false:false || false=false; 其他情况均为 true。
与逻辑与类似,若操作数非布尔值,逻辑或不一定返回布尔值:
若一个操作数是对象,另一个是布尔值,返回该对象。
若两个操作数均为对象,返回第一个对象。
若一个操作数是 null,返回 null。
若一个操作数是 NaN,返回 NaN。
若一个操作数是 undefined,则发生错误。
逻辑或也是短路运算符。若第一个操作数值为 true,则不再计算第二个操作数。
四、乘性运算符
乘性运算符:乘法、除法与取模
1、乘法运算符,用星号(*)表示,用于两个数相乘。处理特殊值时,ECMAScript 有特定行为:
若操作数均为数字,执行常规乘法。若结果过大或过小,生成 Infinity 或 -Infinity。
若任一操作数为 NaN,结果为 NaN。
Infinity 乘以 0,结果为 NaN。
Infinity 乘以非 0 的任何数字,结果为 Infinity 或 -Infinity,由第二个操作数的符号决定。
2、除法运算符,用斜线(/)表示,用第二个数除第一个数。特殊值行为如下:
若操作数均为数字,执行常规除法。若结果过大或过小,生成 Infinity 或 -Infinity。
若任一操作数为 NaN,结果为 NaN。
0 除以一个非无穷大的数字,结果为 NaN。
Infinity 被非 0 的任何数字除,结果为 Infinity 或 -Infinity,由第二个操作数的符号决定。
3、取模运算符,用百分号(%)表示。若操作数均为数字,执行常规算术除法并返回余数。特殊行为:
若被除数是 Infinity,或除数是 0,结果为 NaN。
若除数是无穷大的数,结果为被除数。
若被除数为 0,结果为 0。
五、加性运算符
加性运算符:加法与减法
1、加法运算符(+),特殊行为:
若任一操作数为 NaN,结果为 NaN。
Infinity 加 -Infinity,结果为 NaN。
若任一操作数是字符串,则遵循以下规则:
若两个操作数均为字符串,将第二个字符串连接到第一个字符串后。
若仅有一个操作数是字符串,将另一个操作数转换为字符串,结果为连接后的字符串。
2、减法运算符(-),若两个操作数均为数字,执行算术减法。特殊规则:
若操作数为 NaN,结果为 NaN。
若任一操作数不是数字,结果为 NaN。
六、关系运算符
关系运算符
关系运算符(小于、大于、小于等于、大于等于)执行数值比较,行为与算术比较相同,每个运算符返回布尔值。
对于字符串,逐个比较两个字符串中对应位置字符的编码值。
1、大写字母的编码值小于小写字母,因此要获得正确的字母顺序比较结果,需先将两个操作数转换为相同大小写形式再比较。
2、比较两个字符串形式的数字时,比较的是字符编码值。
3、比较字符串和数字时,ECMAScript 会将字符串转换为数字,然后按数值顺序比较。若字符串无法转换为数字,则返回 NaN,任何包含 NaN 的关系运算均返回 false。因此,此类比较会返回 false。
七、等性运算符
等性运算符:类型转换与比较规则
1、等号(==) 和非等号(!=),用于判断两个操作数是否相等,这两个运算符会执行类型转换。基本转换规则如下:
若一个操作数是布尔值,在检查相等性前,将其转换为数字。false 转换为 0,true 转换为 1。
若一个操作数是字符串,另一个是数字,在检查相等性前,尝试将字符串转换为数字。
若一个操作数是对象,另一个是字符串,在检查相等性前,尝试将对象转换为字符串(调用 toString() 方法)。
若一个操作数是对象,另一个是数字,在检查相等性前,尝试将对象转换为数字。
比较时还遵守以下规则:
值 null 和 undefined 相等。
在检查相等性时,不将 null 和 undefined 转换为其他值。
若任一操作数为 NaN,等号返回 false,非等号返回 true。即使两个操作数都是 NaN,等号仍返回 false,因为根据规则,NaN 不等于 NaN。
若两个操作数均为对象,则比较其引用值。若指向同一对象,等号返回 true,否则不等。
其他运算符:全等、条件与赋值
2、全等号和非全等号
等号和非等号的同类运算符是全等号和非全等号。这两个运算符所做的与等号和非等号相同,只是他们在检查相等性前,不执行类型转换。
全等号由三个等号(===)表示,只有在无需类型转换运算数就相等的情况下,才返回true。
var sNum="55"; var iNum=55; alert(sNum==iNum); //输出 "true"
alert(sNum===iNum); //输出 "false"
非全等号由两个感叹号加两个等号(!==)表示,只有在无需类型转换运算数不相等的情况下,才返回true。
var sNum="55"; var iNum=55; alert(sNum != iNum); //输出 "false"
alert(sNum !== iNum); //输出 "true"
八、其他运算符
1、条件运算符,即三元运算符 : variable = boolean_expression ? true_value : false_value;
2、赋值运算符(=) 复合赋值运算符:+=、-=、*=、/=、%=、<<=、>>=、>>>=
3、逗号运算符 用逗号运算符可以在一条语句中执行多个运算。 如: var iNum1=1,iNum2=2;
JS转整数出现NaN怎么办?常见异常处理方案
2026-11-05 16:27:31
推荐几款免安装的在线JS压缩工具
2026-11-05 14:54:53
JS怎么使用JSON.stringify实现JSON格式化与缩进
2026-11-04 10:47:30
CodePen、JSFiddle 与 StackBlitz:主流 JS 在线编辑器对比
2026-11-03 21:07:49
JS字符串转数字后怎么正确判断是否为有效数值
2026-11-03 20:04:15
