JavaScript 常用运算符详解与行为规范

作者:清欢

时间:2026-10-26

浏览:176

本文系统梳理 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,否则不等。


其他运算符:全等、条件与赋值

一元运算符:delete 与 void 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;

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章