注意!应遵循的原则:
当两个运算数的类型不同时:将他们转换成相同的类型,
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,则执行第三个运算数表达式,返回第三个运算数表达式的值。