递增递减运算符
前置型:把运算符写到变量的前面 ++num1
后置型:把运算符写到变量的后面 num2++
递增++和递减--运算就是通过不断的加 1 或减 1,然后把结果赋值给左侧操作数,以实现改变自身结果的一种简洁方法。
作为一元运算符,递增运算符和递减运算符职能作用于变量、数组元素或对象属性,不能作用于直接量。根据位置不同,
可以分为 4 种运算方式:
1.前置递增(++n):先递增,再赋值。
2.前置递减(--n):先递减,再赋值。
3.后置递增(n++):先赋值,再递增。
4.后置递减(n--):先赋值,再递减。
递增和递减是相反的操作,在运算之前都会试图转换值为数值类型,如果失败则返回 NaN
单独对一个操作数使用 递增或递减 不和别的发生计算,是没有关系的,结果都是一样的
一旦需要和别的发生计算:
前置型:num1基础上,进行+1的操作,然后和2进行相加
var result1 = ++num1 + 2; //3 3 先自增,再加2
后置型:num2基础上,和2进行相加
注意:在计算之前,并没有发生自增的情况,但是计算完成之后,还是会自增的。
var result2 = num2++ + 2; //3 2 先加2,再自增
赋值运算符
num1 = num1 + 10; // num1 += 10;
num1 = num1 - 10; // num1 -= 10;
num = num % 5; // num %= 5;
num = num / 5; // num /= 5;
num = num * 5; // num *= 5;
alert(num);
大于小于
关系操作符(比较操作符),最终返回的结果是一个布尔值
左右两侧如果都是数值,就比较数值的大小
注意如果不是数字的情况
1. 字符串的比较
字符串的比较是逐位比较的,并且比较的是字符编码大小
2. 如果比较中出现了NaN,那么结果就是false
3. null 、undefined、true、false,最终会根据对应的规则进行转换。
http://www.fengfly.com/document/ECMAScript5.1/ 规则查看地址
var str1 = 'A';
var str2 = '3';
alert(str1>=str2); //23 > 3 没有转换成数字进行比较
23 中的2 对应的字符编码是 50
3 中的3 对应的字符编码是 51
50>=51 =>false
相等操作符
相等 ==
赋值 =
! 取反
不等 !=
全等 ===
全不等 !==
相等和全等
虽然都是比较两个值是否相等,但是在比较的时候,它们分别遵循不一样的规则。
相等 ==
比较两个操作数之间是否相等,如果相等返回true,如果不相等返回false,在比较的时候,会进行隐式类型转换。
alert(1 == 1) //true
alert('1' == 1) //true
alert(true == 1) //true
隐式转换规则
NaN不等于任何类型的数值,包括自己本身,所以一定返回false;
如果都是String类型的话,比较字符编码值,如果完全一致,则返回true,否则返回false;
如果两侧都是Number类型数值,比较值是否相同;
如果两边都是Object类型,则比较地址是否一致;
null == undefined 返回true;
如果一侧是String,一侧是Number,将String(指的是不是数值类型的字符串)转换为NaN之后,进行比较;
如果一侧是Boolean,则把布尔值转换为Number类型后,再根据上述规则进行比较;
具体参照ECMAScript规则
全等 ===
全等也是比较两个操作数之间是否相等的,但与==不同,它从以下两个点进行考虑:
1.值是否相等
2.类型是否相等
alert(1 == 1) //true
alert('1' == 1) //false
alert(true == 1) //false
alert(null === undefined);
alert(null == undefined)
因为会判断类型,所以在这里并不会进行隐藏式类型的转换
1.一旦两个操作数的数据类型不同,直接返回false;
2.一旦出现NaN,返回结果false;
3.当类型一致的情况下,比较值是否相同,如果不同返回false,如果相同返回true;
不等和全不等
和以上的相等和全等一样,不等和全不等在比较的时候
前者只注重值,并且会进行隐藏式类型的转换,转换规则与相等是一致的,只是返回的结果正好是相反
后者在注重值的同时,还会注重类型是否相同,转换规则与全等是一致的,只是返回的结果正好是相反
运算符优先级
var result1 = 2 + 3; + 加法运算符优先于= 赋值运算符
alert(result1); //5
var result2 = 2 + 3 * 2; //乘法运算符优先级高于加法运算的
var result3 = 1 + 2 == 5 % 0;
alert(result3); //false 执行顺序 % + == =