JavaScript运算符详解:分类、运算规则与注意事项

作者:阿沐时间:2026-10-27 15:03:04浏览:212

本文系统介绍JavaScript中的各类运算符,涵盖算术、等同全同、比较、字符串、逻辑及赋值运算符。详细解析各运算符的运算规则、类型转换机制、结合性及三元运算符用法,帮助开发者准确掌握JS运算逻辑与潜在陷阱。

JavaScript运算符概述

JavaScript提供了丰富的运算符,主要可划分为算术、等同与全同、比较、字符串、逻辑以及赋值等几大类。每种运算符都遵循特定的运算规则,下文将对这些运算符的具体行为进行详细介绍。



  一、JavaScript运算符的种类

JavaScript运算符分类

1、算术运算符:包括加法(+)、减法(-)、乘法(*)、除法(/)、取模(%)、一元负号(-)、自增(++)和自减(--)。



2、等同与全同运算符:包括相等(==)、全等(===)、不等(!==)和非全等(!==)。



3、比较运算符:包括小于(<)、大于(>)、小于等于(<=)和大于等于(>=)。



4、字符串运算符:涉及小于(<)、大于(>)、小于等于(<=)、大于等于(>=)、赋值(=)以及连接(+)。



5、逻辑运算符:包括逻辑与(&&)、逻辑或(||)和逻辑非(!)。



6、赋值运算符:包括简单赋值(=)以及复合赋值如加等于(+=)、乘等于(*=)、减等于(-=)和除等于(/=)。



  二、JavaScript运算符的规则

算术运算符规则

1、算术运算符的运算规则



对于“+”运算符,它既可以执行加法运算,也可以执行字符串连接。如果两个操作数中有一个是字符串,JavaScript会将另一个操作数转换为字符串,然后将两者连接起来。



当“+”运算符的一个操作数是对象时,JavaScript会尝试将该对象转换为数字以执行加法,或转换为字符串以执行连接。



对于“-”、“*”和“/”运算符,如果两个操作数中有一个是非数字,JavaScript会先将其转换为数字,然后执行数学运算。



在JavaScript中,所有数值均以浮点数形式存储,因此除法运算的结果也是浮点数,例如 5 / 2 的结果为 2.5。当除数为0时,结果为正无穷或负无穷;而 0 / 0 的结果为 NaN(非数字)。



“%”是模运算符,用于计算第一个操作数对第二个操作数的余数,即第一个数除以第二个数后的余数。如果操作数是非数字,JavaScript会先将其转换为数字再计算。



“-”作为一元取反运算符,用于将操作数取反。如果操作数不是数字,JavaScript会先将其转换为数字。



“++”和“--”是增量和减量运算符,其操作数必须是一个变量、数组元素或对象属性。如果操作数不是数字,JavaScript会先将其转换为数字。



需要注意的是,如果“++”位于操作数之前(前缀形式),会先对操作数进行增量操作,然后返回增量后的值。



如果“--”位于操作数之后(后缀形式),会先返回操作数未增量前的值,然后再对操作数进行减量。



例如:i = 1; // 将值1赋值给变量i



j = ++i; // 先将i的值增加为2,然后将2赋值给j,此时i和j的值均为2。



例如:i = 1; // 将值1赋值给变量i



j = i++; // 先将i的当前值(1)赋值给j,然后将i的值增加为2,此时i为2,j为1。



减量运算符“--”的行为与“++”类似,只是执行的是减量操作。



等同与全同运算符

2、等同运算符与全同运算符



(I) “==”(等同)和“!==”(非等同)运算符:



这两个运算符用于比较两个操作数,并返回一个布尔值。



在比较数值、字符串和布尔值时,使用的是值比较。只有当两个变量存储的值完全相等时,它们才被视为相等。



在比较对象、数组和函数时,使用的是引用比较。只有当两个变量引用的是同一个对象时,它们才相等。即使两个数组包含完全相同的元素,它们也是不同的对象,因此不相等。对于引用对象、数组或函数的变量,只有当它们指向同一个对象、数组或函数时,才被视为相等。



注意:应遵循以下原则:



当两个操作数的类型不同时,JavaScript会尝试将它们转换为相同的类型再进行比较。



1) 如果一个操作数是数字,另一个是字符串,JavaScript会将字符串转换为数字,然后进行比较。



2) true 会被转换为 1,false 会被转换为 0,然后进行比较。



3) 如果一个操作数是对象、数组或函数,另一个是数字或字符串,JavaScript会先将对象、数组或函数转换为原始类型的值(先调用valueOf(),如果不行则调用toString()),然后再进行比较。



4) 其他类型的组合被视为不相等。



当两个操作数类型相同,或转换后类型相同时:



1) 对于两个字符串,如果对应位置上的字符完全相等,则两个字符串相同。



2) 对于两个数字,如果数值相等则相同。如果其中一个是NaN,或者两个都是NaN,则它们不相同。



3) 如果两个操作数都是true,或者都是false,则它们相同。



4) 如果两个操作数引用的是同一个对象、函数或数组,则它们相等;如果引用的不是同一个对象、函数或数组,即使它们可以转换为完全相等的原始值,它们也不相等。



5) 如果两个操作数都是null,或者都是undefined,则它们相等。



“!=”(非等同)运算符的结果与“==”(等同)运算符相反。



(II) “===”(全同)和“!==”(非全同)运算符:



全同运算符遵循等同运算符的比较规则,但它不进行类型转换。如果两个操作数的类型不同,直接返回false;只有当类型相同时,才按照等同运算符的规则进行比较。



“!==”(非全同)运算符的结果与“===”(全同)运算符相反。如果两个操作数的类型或值不同,则返回true。



比较运算符

3、比较运算符



这些比较运算符用于比较不同类型的值,结果返回一个布尔值。



  “<”“>”“<=”“>=”

注意规则:比较的操作数可以是任意类型,但实际比较只能在数字或字符串上执行。非数字和非字符串的操作数将被转换为数字或字符串。



1) 如果两个操作数都是数字,或者都可以转换为数字,则按照数值大小进行比较。



2) 如果两个操作数都是字符串,或者都可以转换为字符串,则按照字母顺序进行比较。



3) 如果字符串与数字进行比较,JavaScript会将字符串转换为数字后再进行比较。



4) 如果操作数既不能转换为数字,也不能转换为字符串,则比较结果为false。



字符串运算符

4、字符串运算符



JavaScript中没有专用的字符串运算符,但某些运算符在处理字符串操作数时表现出不同的行为。



(I) “+”用于连接两个字符串:



1) 当两个操作数都是字符串时,将它们连接起来。



2) 当其中一个操作数是数字时,JavaScript会将数字转换为字符串,然后将两者连接起来。



(II) “>”等比较运算符通过比较确定两个字符串的顺序,比较基于字符编码顺序,较小的字符位于较大的字符之前,大写字母位于小写字母之前。



(III) “+”的作用方式取决于计算顺序:



例如:s = 1 + 2 + "var",返回结果 "3var"。因为先计算 1 + 2 得到数字3,然后将结果3转换为字符串与 "var" 连接。



例如:s = "var" + 1 + 2,返回结果 "var12"。因为先计算 "var" 与 1 的连接得到字符串 "var1",然后将结果 "var1" 与转换为字符串的 2 连接起来。



逻辑运算符

5、逻辑运算符



逻辑运算符用于执行布尔运算,常与比较运算符结合使用,以表示复杂的比较逻辑。



包括“&&”(逻辑与)、“||”(逻辑或)和“!”(逻辑非)运算符。



(I) “&&”(逻辑与):当两个操作数都是布尔值时,对它们执行AND操作,即仅当两个布尔值都为true时,返回true,否则返回false。



注意:实际表现



“&&”会先检测第一个表达式操作数的布尔值。如果第一个操作数表达式返回false,则直接返回左边第一个操作数表达式的值(false);否则,将继续检测第二个(右边)的操作数表达式,并返回第二个操作数表达式的值。



例如:if (a = b) stop(); 与 (a = b) && stop(); 在逻辑上等价。



不推荐使用这种方法,因为运算符右边的代码不一定保证会被执行。



例如:if ((a < b) && (b++ < 10)) stop(); 如果右边的增量操作是必需的,可能会因为前面的返回值而不被执行。因此,一般反对在“&&”右边使用具有副作用的表达式(如赋值、函数调用、增减量)。



将“&&”视为布尔代数运算符会更简单和安全。



(II) “||”(逻辑或):当两个操作数都是布尔值时,对它们执行OR操作,即当两个布尔值中有一个为true时,返回true,否则返回false。



注意:实际表现



“||”会先检测第一个表达式操作数的布尔值。如果第一个操作数表达式返回true,则直接返回左边第一个操作数表达式的值(true);否则,将继续检测第二个(右边)的操作数表达式,并返回第二个操作数表达式的值。



同样不推荐使用这种方法,因为运算符右边的代码不一定保证会被执行。



一般反对在“||”右边使用具有副作用的表达式(如赋值、函数调用、增减量)。



将“||”视为布尔代数运算符会更简单和安全。



(III) “!”(逻辑非)是一个一元运算符,放在操作数之前,其目的是对操作数取反。



赋值运算符

6、赋值运算符



(I) “=”是基本赋值运算符;它期望左边的操作数是一个变量、数组元素或对象属性。



它期望右边的操作数是任意类型的任意值。



赋值运算符具有从右到左的结合性。如果一个表达式中包含多个赋值运算符,计算将从最右边开始。



注意:每个赋值表达式都有一个值,即运算符右边的值。



(II) 可以使用带有操作的复合赋值运算符。



“+=”表示将左边的值加上右边的值后,再赋值给左边的值。“-=”、“/=”、“*=”等运算符遵循相同的逻辑。



其他运算符与注意事项

7、其他运算符



“?:”是条件运算符,也是唯一的三元运算符。



其语法为:表达式1的布尔结果 ? 表达式2(任意类型的任意值):表达式3(任意类型的任意值)。



根据第一个操作数的布尔结果,如果为true,则执行第二个操作数表达式,并返回其值;如果为false,则执行第三个操作数表达式,并返回其值。



  三、JavaScript运算符的注意

1、需要注意传递给运算符的数据类型和返回的数据类型!不同的运算符期望其操作数表达式的结果符合特定的数据类型。



例如:对字符串不能直接进行乘法运算,"a" * "b" 是非法的。但在可能的情况下,JavaScript会将表达式转换为正确的类型。因此,表达式 "3" * "5" 是合法的,JavaScript会将字符串转换为数字执行运算,结果返回数字15,而不是字符串 "15"。



2、+ 运算符根据操作数的不同,表现出不同的行为:



字符串 + 字符串 = 字符串(被连接);"a" + "b" = "ab","5" + "6" = "11"。



字符串 + 数字 = 字符串(被连接,数字转换为字符串);"a" + 5 = "a5","1" + 0 = "10"。



数字 + 数字 = 数字(相加);5 + 5 = 10。



3、注意运算符的结合性,有些运算符从左到右结合,有些从右到左结合。



例如:w = a + b + c 等同于 w = (a + b) + c。



w = ---b 等同于 w = - ( - ( -b ) );w = a = b = c 等同于 w = ( a = ( b = c ))。



一元运算符、赋值运算符和三元运算符的结合性是从右到左的。



以上就是对JavaScript运算符的详细介绍,希望能为您的日常开发提供帮助。

作者最新文章