1、javascript具有下列种类的运算符:算术运算符;逻辑运算符;比较运算符;
2、目的分类:字符串运算符;逻辑运算符;逐位运算符;赋值运算符;
3、特殊运算符:条件运算符;typeof运算符;创建对象运算符new;delete运算符;void运算符号;逗号运算符;
算术运算符:+ 、 - 、* 、 / 、 % 、 -(一元取反) 、 ++ 、 --
等同运算符与全同运算符:==(等于) 、 ===(恒等于)、 !=(不等于) 、 !==(不恒等于)
比较运算符:< 、 > 、 <= 、 >=
字符串运算符: +
逻辑运算符:&& 、 ||、 !、
赋值运算符:=、 +=、 *=、 -=、 /=
规则:
一、一定要注意传递给运算符的数据类型和返回的数据类型!不同的运算符都期望它的运算数表达式计算出的结果符合某种数据类型。
例如:对字符串是不能进行乘法运算的,"a" * "b" 是不合法的,但是,在可能的情况下,javascript会把表达式转换成正确的类型,因此,表达式 "3" * "5" 是合法的,javascript将字符串转换成数字执行运算,结果返回的是数字15,而不是字符串"15"。
二、+ 根据运算数的不同,具有不同的表现: (~~~ +运算符偏爱字符串,只要有操作数是字符串(包括数值字符串),都会进行字符串连接操作)
字符串 + 字符串 = 字符串(被连接);"a" + "b" = "ab" "5" + "6" = "56"
字符串 + 数字 = (字符串转换成数字)字符串(被连接);"a" + 5 = "a5" 5被转换成字符串 "1" + 0 = "10"
数字 + 数字 = 数字(相加)5 + 5 = 10。
三、注意运算符的结合性,有些运算符从左到右的结合性;有些从右到左结合性。
例如:w = a + b + c 等同于 w = (a + b) + c;
w = ---b 等同于 w = - ( - ( -b ) ); w = a = b = c 等同于 w= ( a = ( b = c ))
一元运算符、赋值运算符、三元运算符的结合性是从右到左的;
四、算术运算符规则:
“+”:可以进行“加法”与“连接”运算;如果2个运算符中的一个是字符串,javascript就将另一个转换成字符串,然后将2个运算数连接起来。
“+”:如果一个运算数是对象,javascript就会将对象转换成数字做加法运算或者字符串做连接运算;
“-”“*”“/” 如果2个运算数中的一个是是非数字,则将它转化成数字执行数学运算。
“/” 在javascript中,由于所有的数都是浮点数,除法的结果都是浮点数,5 / 2 = 2.5 ;除数为0的结果为正负无穷;0/0为NaN;
“%”模运算符:计算第一个运算数对第二个运算数的模,就是第一个运算数被第二个运算数除时,返回余数。如果运算数是非数字的,则转换成数字。
“-”一元取反:将运算数取反,如果运算数不是数字,则转化成数字。
“++”“--”增量运算符/减量运算符号:运算数必须是一个变量、树组的一个元素或对象的一个属性。如果运算数不是数字,则转换成数字。
注意:如果“++”位于运算数之前,先对运算数进行增量,然后计算运算数增长后的值。
如果“--”位于运算数之后,先计算运算数未增长之前的值,然后对运算数增量。
例如:i = 1; //赋值给i值1
j = ++i; //先将i增量为2,然后将2赋值给j,i的值是2,j的值也是2。
i = 1; //赋值给i值1
j = i++; //先将i赋值给j,然后对将i值增量到2,i的值是2,j的值是1。
减量运算符“--”与“++”相同。
五、等同运算符与全同运算符:
(一)“==”“!==”等同运算符与非等同运算符:
比较2个运算数,返回一个不布尔值。
比较数值、字符串、布尔值使用的都是量值。当且仅当两个变量存放的值相等的时候,他们才相等。
比较对象、数组、函数的时候,使用的是引用,只有2个变量引用的是同一个对象时,他们才是相等的
两个不同的数组是完全不同的,即使他们具有完全相同的元素。对于存放对象、数组、函数的引用的变量来说,只有当他们引用的是同一个对象、数组、函数的时候,他们才相等。
注意!应遵循的原则:
当两个运算数的类型不同时:将他们转换成相同的类型,
1)一个数字与一个字符串,字符串转换成数字之后,进行比较。
2)true转换为1、false转换为0,进行比较。
3)一个对象、数组、函数 与 一个数字或字符串,对象、数组、函数转换为原始类型的值,然后进行比较。(先使用valueOf,如果不行就使用toString)
4)其他类型的组合不星等。
想两个运算数类型相同,或转换成相同类型后:
1)2个字符串:同一位置上的字符相等,2个字符串就相同。
2)2个数字:2个数字相同,就相同。如果一个是NaN,或两个都是NaN,则不相同。
3)2个都是true,或者2个都是false,则想同。
4)2个引用的是同一个对象、函数、数组,则他们相等,如果引用的不是同一个对象、函数、数组,则不相同,即使这2个对象、函数、数组可以转换成完全相等的原始值。
5)2个null,或者2个都是未定义的,那么他们相等。
“!=”非等同运算符:与等同运算符检测的结果相反。
(二)“===”“!===”全同运算符与非全同运算符号:
全同运算符遵循等同运算符的比较规则,但是它不对运算数进行类型转换,当两个运算数的类型不同时,返回false;只有当两个运算数的类型相同的时候,才遵循等同运算符的比较规则进行比较。
“!==”非全同运算符与全同运算符比较的结果相反。如果两个运算数的类型或者值不同的时候,返回true。
六、比较运算符:
这些比较运算符用于比较不同类型的值,结果返回一个布尔值。
“<”“>”“<=”“>=”
注意规则:比较的运算数可以是任意类型的,但是只能在数字和运算数上执行。不是数字和字符串的运算数将被转换成数字或字符串。
1)如果两个运算数都是数字,或者都可以转换成数字,则按照数字的大小进行比较;
2)如果两个运算数都是字符串,或者都可以转换成字符串,则将按照字母顺序进行比较;
3)如果字符串遇到数字,则将字符串转换成数字进行比较。
4)如果运算数既不能转换成数字,也不能转换成字符串,则返回结果false。
七、字符串运算符:
并没有专用的字符串运算符,只是有些运算符在遇到字符串运算数的时候,表现不同。
(一)“+”连接2个字符串;
1)当2个运算数都是字符串的时候,连接起来;
2)当其中有一个是数字的时候,将数字转换成字符串,连接起来;
(二)“>”这样的比较运算符通过比较确认两个字符串的顺序,比较采用字符的顺序,较小的位于教大的前面,大写字母位于小写字母之前。
(三)“+”的作用方法取决于计算顺序,
如:s = 1 + 2 +"var" 则:返回结果3var; 因为先计算1+2,然后将结果3转换成字符串与"var"连接;
如:s = "var" + 1 + 2 则:返回结果var12; 因为先计算var与1的连接,在将结果var1与转换成字符串的2连接起来。
八、逻辑运算符:
用于执行布尔运算,常常和比较运算符一起使用,来表示复杂的比较运算。
“&&” 逻辑与运算、“||”逻辑或运算符、“!”逻辑非运算符
(一)“&&”当两个运算数都是布尔值的时候,逻辑与对他们进行and操作,即:当且仅当两个布尔值都是true的时候,返回结果true,否则返回false。
注意:实际表现
“&&”将检测第一个表达式运算数布尔值,如果第一个运算数表达式返回false,则返回左边第一个运算数表达式的值:false;否则将继续检测第二个即右边的运算数表达式,然后返回第二个运算数表达式的值;
例如:if (a = b) stop(); 与 (a = b) && stop(); 等价
不赞成使用这个方法,因为运算符右边的代码不能保证会被执行,
例如:if ((a < b) && (b++ <10) ) stop();如果运算符右边的增量必须的话,却有可能由于前面的返回值而不被执行,一般反对在&&的右边使用具有其他作用的表达式(赋值、函数调用、增减量);
将“&&”看作是一个布尔代数的运算符,会更简单与安全。
(二)“||”当两个运算数都是布尔值的时候,逻辑或对他们进行or操作,即:当两个布尔值有一个是true的时候,返回结果true,否则返回false。
注意:实际表现
“||”将检测第一个表达式运算数布尔值,如果第一个运算数表达式返回true,则返回左边第一个运算数表达式的值:true;否则将继续检测第二个即右边的运算数表达式,然后返回第二个运算数表达式的值;
同样不赞成使用这个方法,因为运算符右边的代码不能保证会被执行,
一般反对在||的右边使用具有其他作用的表达式(赋值、函数调用、增减量);
将“||”看作是一个布尔代数的运算符,会更简单与安全。
(三)“!”逻辑非是一个一元运算符,放在运算数之前,它的目的是对运算数取反。
九、赋值运算符:
(一)“=”是赋值运算符;他总是期望左边的运算数是一个变量、数组的一个元素或对象的一个属性;
期望右边是一个任意类型的任意的值;
从右到左的结合性,如果一个表达式中有多个赋值运算符,则从最右边开始计算。
注意:每一个赋值表达式都有一个值,就是运算符右边的值;
(二)可以使用带操作的赋值运算
“+=” 左边的值加上右边的值后,赋值于左边的值。“-=”“/=”“*=”方法一样;
十、其他运算符:
“?:”条件运算符是唯一的一个三元运算符;
一个表达式的布尔结果?表达式1(任意类型的任意值):表达式2(任意类型的任意值);
根据第一个运算数的布尔值结果,如果为true,则执行第二个运算数表达式,返回第二个运算数表达式的值;如果第一个运算数的布尔值结果是false,则执行第三个运算数表达式,返回第三个运算数表达式的值。
-
4.1 Java运算符基础与运算符结合性
2019-05-08 22:59:48Java运算符基础,一元运算符,二元运算符,移位关系运算符,逻辑运算符,运算符优先级,运算符结合性运算符基础
Java 是强类型语言,运算符优先级有着严格的规定,程序会严格按照优先级运行
Java运算符图表
运算符分类 结合顺序 运算符 分隔符 左结合 . [] ( ) ; , 一元运算符 右结合 ! ++ – - ~ 算术运算符 左结合 * / % + - 移位运算符 左结合 << >> >>> 关系运算符 左结合 < > <= >= instanceof = = != 位运算符 左结合 & ^ | 逻辑运算符 左结合 && || 三目运算符 右结合 布尔表达式?表达式1:表达式2 赋值运算符 右结合 = *= /= %= += -= <<= >>= >>>= &= *= |= 上述表的优先级是从高到低,即分隔符优先级最高,赋值运算符优先级最低。优先级大家可以理解为小学数学中先括号,后乘除,再加减等等
同一优先级运算符,运算次序怎么办?
运算符结合性
结合性:指一个操作数左右两边各有一个操作符时,先按照操作的优先级决定运算次序,如果优先级相同,再按照操作符的结合性来决定运算次序
Java中各种运算符的结合性分为两种:
-
左结合性
自左向右,即先左后右
例如:
表达式: int result = x – y + z; //则y应先与 “-”号结合,执行x-y运算,然后再执行 +z的运算。
这种自左向右的结合方向就称为“左结合性”
-
右结合性
自右向左,即先右后左
例如:
int result = x = y = z = 10; 由于“=”的右结合性,应先执行z = 10; 再执行 y = z 再执行 x = y 运算
这种自右向左的结合方向就称为“右结合性”
java语言中大部分运算符也是从左到右结合的,只有一元运算符、赋值运算符和三元运算符例外
-
-
oracle还原数据一元运算符“--”后缺少表达式。_C运算符的优先级和结合性
2021-01-19 04:16:04运算符是一种告诉编译器执行特定的数学或...根据运算符可操作的操作数的个数,可把运算符分为一元运算符、二元运算符和多元运算符(一般三元)。1、算数运算符用于数值计算,包括:加(+)、减(-)、乘(*)、除(/)、求余(%...运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。
C语言内置了丰富的运算符,大体可分为10类:算术运算符、关系运算符、逻辑运算符、位操作运算符、赋值运算符、条件运算符、逗号运算符、指针运算符、求字节数运算符和特殊运算符。
根据运算符可操作的操作数的个数,可把运算符分为一元运算符、二元运算符和多元运算符(一般三元)。
1、算数运算符
用于数值计算,包括:加(+)、减(-)、乘(*)、除(/)、求余(%)、自增(++)、自减(--)。
2、关系运算符
用于比较运算,包括:大于(>)、小于(=)、小于等于(<=)、不等于(!=)。
3、逻辑运算符
用于逻辑运算,包括:与(&&)、或(||)、非(!)。
4、位操作运算符
按二进制位进行运算,包括:位与(&)、位或(|)、位非(~)、 位异或(^)、左移(<>)。
5、赋值运算符
用于赋值运算,包括:简单赋值(=)、复合算术赋值(+=、-=、*= 、/=、%=)以及复合位运算赋值(&=、|=、^=、>>=、<<=)等。
6、条件运算符
用于条件求值,三目运算符:(x > y) ? x : y。C语言中有且只有这一个三目运算符。
7、逗号运算符
用于把若干表达式组合成一个表达式:表达式1 , 表达式2。
8、指针运算符
用于取内容(*)和取地址(&)两种运算。
9、求字节数运算符
用于计算数据类型所占的字节数(sizeof)。
10、特殊运算符
包括括号()、数组下标[]、成员(-> 和 .)等。
比如式子“x = 1 + 2 * 3 / 4”,需要先计算乘再计算除,然后是加,最后是赋值。这里介绍下关于运算符在参与运算过程中的两个概念:
- 优先级:当不同运算符优先级不同时,先计算谁后计算谁
- 结合性:当不同运算符优先级相同时,先计算谁后计算谁
运算符的优先级和结合性
作为初学者,当一个表达式中有多个运算符时,如果不知道哪个优先级高哪个优先级低就可以查一下优先级表,等用的时间长了自然而然就记住了。而且,事实上在编程的时候也不需要考虑优先级的问题。因为如果不知道优先级高低的话,加一个括号就可以了,因为括号( )的优先级是最高的。
另外,大多数运算符的结合性都是从左往右。从右向左的一个是单目运算符,另一个是三目运算符,还有一个就是双目运算符中的赋值运算符=。运算符的“结合性”也不用死记,在不断使用中就记住了。
扩展阅读:
C语言:一种高效、易学的编程语言
C语言的内存分配方式:堆和栈
C程序中常见的与内存相关的错误
GCC编译C语言程序的全过程
C语言中静态库和动态库简介
-
js运算符(运算符的结合性)
2019-09-23 22:49:021、javascript具有下列种类的运算符:算术运算符;逻辑运算符;比较运算符;2、目的分类:字符串运算符;...算术运算符:+ 、 - 、* 、 / 、 % 、 -(一元取反) 、 ++ 、 --等同运算符与全同运算符:==(等于) ...转载于:https://www.cnblogs.com/stephenykk/p/3143706.html
-
JAVA运算符优先级和结合性
2016-08-16 01:31:07《JAVA运算符优先级和结合性》 1. java运算符优先级和结合性 优先级: 为解决先执行哪个运算的问题而产生的概念。...一元运算符,三元运算符和赋值运算符的结合性是右结合性,其他都是左结合性《JAVA运算符优先级和结合性》
1. java运算符优先级和结合性
优先级:
为解决先执行哪个运算的问题而产生的概念。它决定着运算符执行的先后顺序。不要依赖于默认优先级,应当用()进行 划分,以便阅读。
结合性:
为解决是从左到右计算,还是从右到左计算而产生的概念。一元运算符,三元运算符和赋值运算符的结合性是右结合性,其他都是左结合性。
运算符结合性
[ ]. ( ) (方法调用)从左向右
! +(正) -(负) ~ ++ --从右向左
* / %从左向右
+(加) -(减)从左向右
<< >> >>>从左向右
< <= > >= instanceof从左向右
== !=从左向右
&从左向右
^从左向右
|从左向右
&&从左向右
||从左向右
?:从右向左
= += -= *= /= %= &= |= ^= <<= >>= >>=从右向左
-
java运算符优先级和结合性
2018-11-05 14:21:54本文转载自:https://www.cnblogs.com/litifeng/p/6647021.html java运算符优先级和结合性 运算符 结合性 [ ] . ( ) (方法调用) 从左向右 ! ~ ++ -- +(一元运算) -(一元运算) 从右向左 * / % ... -
三目运算符_C语言知识点:运算符的优先级和结合性
2021-01-12 05:14:44运算符是一种告诉编译器执行特定的数学或...根据运算符可操作的操作数的个数,可把运算符分为一元运算符、二元运算符和多元运算符(一般三元)。1、算数运算符用于数值计算,包括:加(+)、减(-)、乘(*)、除(/)、求余(%... -
运算符优先级和结合性
2020-03-29 11:02:57这篇文章的表总结的很好。这里大概总结一下,便于记忆。 运算符的优先级基本符合常识,除了下面5里面的按位...2. 一元操作符, 前缀++/--,例如(+ / - / ! / ~ / * / & / (type) / sizeof ) 3. 运算符(* /... -
C++ 运算符优先级和结合性
2010-06-12 21:15:00C++语言包括所有的C运算符,并增加了一些新的运算符。运算符按一操作数(一元运算符)、双操作数(二进制运算符)、三操作数(三元运算符)的优先级顺序解析。 -
java优先级对接_java运算符优先级和结合性
2020-12-24 09:30:32运算符 结合性[ ] . ( ) (方法调用) 从左向右! ~ ++ -- +(一元运算) -(一元运算) 从右向左* / % 从左向右+ - 从左向右<< >> >>... -
2.13 运算符的优先级和结合性
2004-12-06 14:29:00结合性(associativity)规定了相同优先级的运算符的计算次序问题。圆括号可用于覆盖一般的运算符优先规则。所有的Java运算符优先级和结合性都在附录B中。一元加法和一元减法就是平时所说的正负号咯。 -
运算符
2015-04-01 21:22:00运算符重载为成员函数时,会省略一个参数,...不能改变运算符的结合性;重载运算符的函数不能有默认值,否则就改变了运算符参数的个数;不能定义新的运算符,某些运算符不能重载。可以改变运算符原有的操作类型。... -
c中的运算符优先级及结合性(2)
2009-04-22 11:27:00(1)同一优先级的运算符优先级别相同,运算次序由结合方向决定。例如,*与/具有相同的优先级别,其结合方向为自左至右,因此,3*5/4的运算次序是先乘后除。一和++为同一优先级,...而++和-(负号)运算符是一元运算 -
运算符重载
2020-04-06 18:12:12不改变运算符的结合性 不改变运算符所需要的操作数 不能创建新的运算符 一元运算符 Object op 或 op Object 重载为成员函数,解释为: Object. operator op() 操作数由对象Object通过this指针隐含传递 重载为友元... -
运算符的优先级
2018-08-01 21:42:59结合性 1 () 括号运算符 由左至右 2 !、+(正号)、-(负号) 一元运算符 由左至右 2 ... -
Java:运算符优先级表
2020-09-26 09:13:27~ ++ -- +(一元运算符)- (一元运算符) ( )(强制类型转换)new 从右向左\color{red}{从右向左}从右向左 * / % 从左向右 + - 从左向右 << >> >>> 从左向右 < <= > >= ... -
各类运算符的优先级
2018-08-07 23:02:26结合性 1 () 括号运算符 由左至右 2 !、+(正号)、-(负号) 一元运算符 由左至右 2 ... -
运算符重载的规则与限制
2019-05-17 17:43:181.运算符的优先级不能被重载改变。然而,圆括号能够强制改变表达式中重载运算符的求值顺序。...重载的一元运算符仍然是一元运算符;重载的二元运算符仍然是二元运算符。运算符“&”、“*”、“+”和“-... -
c++运算符重载
2020-04-02 22:37:54不改变运算符的优先级,结合性 不改变运算符所需要的操作数 不能创建新的运算符 2, 用成员或友元函数重载运算符 -(1)一元运算符 Object op或 op Object 重载为成员函数,解释为: Object . operator op... -
运算符和表达式
2016-09-05 10:50:57C++编程入门系列之五(运算符和表达式)有些运算符需要两个操作数,使用形式为:操作数 运算符 操作数,这样的运算符就叫做二元运算符或双目运算符,只需要一个操作数的运算符叫做一元运算符或单目运算符。... -
运算符优先级呀
2020-07-24 10:46:06结合性 1 () 括号运算符 由左到右 2 !、+ (正号)、- (负号) 一元运算符 由左至右 2 ~ 位逻辑运算符 由右至左 2 ++、- - 递增与递减运算符 由右至左 3 *、/、% 算数运算符 由左至右 4 +、- 算数运算符 ... -
JavaScript运算符优先级
2020-12-15 08:53:05优先级 运算符 说明 结合性 1 []、.、() 字段访问、数组索引、函数调用和表达式分组 从左向右 2 ++ – -~!delete new typeof void 一元运算符、返回数据类型、对象创建、未定 义的值 从右向左 3 、/、% 相乘、相除、 -
JAVA运算符优先级
2015-04-28 14:33:00一元运算符 > 算术运算符 > 移位运算符 > 关系运算符 > 位运算符 > 逻辑运算符 > 赋值运算符 表格转自博客:http://www.cnblogs.com/gw811/archive/2012/10/13/2722752.html 序列号... -
3.5.8 括号与运算符级别
2018-12-15 16:08:00结合性 [ ] . ( ) 从左向右 ! ~ ++ +(一元运算符) -(二元运算符) ( ) (强制类型转换) new 从右向左 / * % 从左向右 + - 从左向右 << >> >>> 从左向右 <... -
重载运算符课程笔记
2018-05-27 13:23:31:” “sizeof”不改变运算符的优先级不改变运算符的结合性不改变运算符所需要的操作数不能创建新的运算符用成员或友元函数重载运算符运算符可以重载为成员函数或者友元函数重载为成员函数 ①一元运算符 Object.... -
C#运算符优先级
2017-03-11 11:56:16下表按运算符优先级从高到低列出各个运算符,具有较高优先级的运算符出现在表格的上面,具有... 结合性 后缀 () [] -> . ++ - - 从左到右 一元 + - ! ~ ++ - - (type)* & sizeof 从右到左 乘除 * / % 从左到右
-
Mysql数据库面试直通车
-
Maven中dependencyManagement使用
-
解决mac 终端每次都需要source .bash_profile 才能生效
-
MHA 高可用 MySQL 架构与 Altas 读写分离
-
CSS基础选择器、复合选择器简介,及权重公式
-
linux的简单系统命令
-
JAVA基础-成员变量的赋值过程
-
信息论09
-
民法学期末复习训练题(含答案).pdf
-
C/C++反汇编解密
-
access应用的3个开发实例
-
江西财经大学《微积分2C》4套期末考试试卷(含答案).pdf
-
Oracle_11g_Linux到Linux_DataGuard部署
-
解决csv文件utf-8编码中文打开乱码
-
武汉理工大学《机械原理》期末试卷及答案.pdf
-
基于SSM实现的房屋租赁系统【附源码】(毕设)
-
使用Node.js还可以发邮件?
-
无机化学(津大版第四版)习题答案.pdf
-
永久改变UG8.0背景颜色方法.txt
-
同济大学2012《基础工程》期末考试试卷(小题含答案).pdf