js操作符

操作符:
操作对象时, 相应的操作符都会调用对象的valueOf() 和toString() 方法;

1、 一元操作符: 只能操作一个值的操作符。

递增和递减操作符:
	var age = 29;
	++age 相当于:age = age + 1;
	--age 相当于:age = age - 1;
	PS:执行前置递增或递减操作时,变量的值都是在语句被求值之前改变的。
	var age = 29;
	var anotherAge = --age + 2;
	alert(age)        //28
	alert(anotherAge) //30

	var num1 = 2;
	var num2 = 20;
	var num3 = --num1 + num2;//21
	var num4 = num1 + num2;//21  (注意点,由于num1的值已被改变为1)
	PS:执行后置递增或递减操作时,变量的值都是在包含他们的语句被求值之后改变的。
	var num = 2;
	var num2 = 20;
	var num3 = num1-- + num2; //22(num1使用递减前的值先执行计算)
	var num4 = num1 + num2;//21(num1使用递减后的值先执行计算)

计算规则:适用于整数、字符串、布尔值、浮点数、和对象。
	1、在应用于一个包含有效数字字符的字符串时,先将其转换成数字,在执行加减1的操作,字符串变量变成数值变量。
	2、在应用于一个不包含有效数字字符的字符串时,将变量的值设置为NaN,字符串变量变成数值变量。
	3、在应用于布尔值false时,先将其转换成0,在执行加减1的操作。布尔值变量变成数值变量。
	4、在应用于布尔值true时,先将其转换成1,在执行加减1的操作。布尔值变量变成数值变量。
	5、在应用于对象时,先调用对象的valueOf()方法以取得一个可供操作的值。然后对该值应用前述规则。
		如果结果是NaN,则再调用toString()方法,再应用前述规则。对象变量变成数值变量。
例如:
	var s1 = "2";
	var s2 = "z";
	var b = false;
	var f = 1.1;
	var o = {
		valueOf: function(){
			return - 1;
		}
	};
	s1++;	//变成数字3
	s2++;	//变成数字NaN
	b--;	//变成数字-1
	f--;	//变成数字0.10000000000000009(由于浮点数舍入错误导致)
	o--;	//变成数字-2

2、一元加和减操作符:正负操作;

3、位操作符:有符号整数和无符号整数(js中基本都是有符号整数,对于无符号整数,第32位不在表示符号)

例如:18的二进制表示为:00000000000000000000000000010010(32位)
		  -18的为禁止便是为:11111111111111111111111111101110
		  计算过程为:1、先转码18的二进制码	00000000000000000000000000010010
		  			  2、求得二进制反码		11111111111111111111111111101101
		  			  3、反码加				11111111111111111111111111101101
		  			  						+  							   1
		  			  得到-18的二进制表示; 11111111111111111111111111101110
	PS:对于NaN和Infinity值执行位操作时,都会被当成0处理。
		对于非数值执行位操作,使用Number()处理为数值,在进行位操作。得到结果为数值。

4、按位操作符:用~表示。返回数值的反码。

例如:
var num1 = 25; //二进制00000000000000000000000000011001
var num2 = ~num1; //二进制11111111111111111111111111100110
alert(num2); //-26
相当于 :var num2 = -num1 - 1;//-26

5、按位与操作符:用&表示。

		第一个数值的位				第二个数值的位        			结果
			1							1							1
			1							0							0
			0							1							0
			0							0							0
	简而言之就是只有两个数值的位都是1时,才返回1,任何一位是0都将返回0;
例如:
	var result = 25 & 3;
	25 = 0000 0000 0000 0000 0000 0000 0001 1001;
	3  = 0000 0000 0000 0000 0000 0000 0000 0011;
	AND= 0000 0000 0000 0000 0000 0000 0000 0001;

6、按位或:用|表示。

与按位与相反即可:

标题7、按位异或:用^表示。

第一个数值的位				第二个数值的位        			结果
	1							1							0
	1							0							1
	0							1							1
	0							0							0

简而言之就是只有一个1时返回1,都是1时返回0。都是0时返回0;

8、左移操作:用<<表示

例如:
		var oldValue = 2;				//等于二进制10
		var newValue = oldValue << 5;	//等于二进制1000000,十进制的64
		注意左移之后,右侧多出空位,需用0补齐32位。以便于得到完整的32位二进制值。
		左移不会影响到操作数的符号位:(注意!!!!!!!)
	有符号右移操作:用>>表示。
	例如:
		var oldValue = 64;				//等于二进制1000000
		var newValue = oldValue >> 5;	//等于二进制10,十进制的2
		注意右移之后,左侧多出空位,需在符号位之右用0补齐32位。以便于得到完整的32位二进制值。
	无符号右移:用>>>表示。
	对于正数来说结果和有符号右移姐夫哦一致!
	对于负数来说就不一样了:得到结果是非常之大。(略)

布尔操作符:

1、逻辑非(!):规则如下:

、操作数是一个对象,返回false。
	、操作数是一个空字符串,返回true。
	、操作数是一个非空字符串,返回false。
	、操作数是数值0,返回true。
	、操作数是任意非0数值(包括Infinity),返回false。
	、操作数是null,返回true。
	、操作数是NaN,返回true。
	、操作数是undefined,返回true。

2、逻辑与(&&)(短路操作)

第一个数值的位				第二个数值的位        			结果
			true							true					true
			true							false					false
			false							true					false
			false							false					false
	规则如下:
		如果操作数全是布尔值,则如上规则:
		如果有一个操作数不是布尔值:
				、第一个是对象,返回第二个操作数。
				、第二个是对象,则只有第一个操作数求值结果为true时,返回该对象。
				、两个操作数都是对象,则返回第二个对象。
				、如果一个操作数为null,则返回null。
				、如果一个操作数为NaN,则返回NaN。
				、如果一个操作数为undefined,则返回undefined。

3、逻辑或(||)

两个操作数同为布尔值时,与逻辑与操作规则相反:
	如果有一个操作数不是布尔值:规则如下:
				、第一个是对象,返回第一个操作数。
				、第一个是操作数的求值为false,返回第二个操作数。
				、两个操作数都是对象,则返回第一个对象。
				、如果两个操作数为null,则返回null。
				、如果两个操作数为NaN,则返回NaN。
				、如果两个操作数为undefined,则返回undefined。

4、算数运算符

乘法:*
		规则如下:
			、两个正数或者负数相乘得正数,有一个负数,得负数。超出范围返回Infinity或-Infinity。
			、如果有一个操作数为NaN,结果为NaN。
			、Infinity与0数值相乘,结果为NaN。
			、Infinity与非0数值相乘,结果为Infinity或-Infinity。
			、Infinity与Infinity相乘,结果为Infinity。
			、如果一个操作数不是数值,则调用Number()转换成数值,运用以上规则。
	除法:(/)
		规则如下:
			、同乘法第一条。
			、同乘法第二条。
			、如果Infinity被Infinity除,结果是NaN。
			、如果是0被0除,结果为NaN。
			、如果是非0的有限数被0除,结果是Infinity或-Infinity。取决于有符号操作数的符号。
			、如果是Infinity被任何非0数值除,结果是Infinity或-Infinity。取决于有符号操作数的符号。
			、如果有一个操作数不是数值,则调用Number()方法转换,在应用以上规则。
	求模(%)
		规则如下:
			、两个操作数均为数值,按照除法计算,返回余数。
			、如果被除数是无穷大时而除数是有穷大的数值,返回NaN。
			、如果被除数是有限大的数值而除数是无穷大的数值,则结果是被除数。
			、如果被除数是有穷大而除数是0时,返回NaN。
			、如果Infinity被Infinity除,返回NaN.
			、如果被除数为0,返回0。
			、如果有一个操作数不是数值,则调用Number()方法转换,在应用以上规则。
	加法:(+)
		规则如下:
			、如果一个操作数是NaN,返回NaN.
			、如果一个操作数是Infinity或-Infinity,返回Infinity或-Infinity.
			、如果Infinity+(-Infinity),返回NaN.
			、+0 加 +0,返回+0;
			、-0 加 -0,返回-0;
			、+0 加 -0,返回+0;
		如果有一个操作数是字符串,遵循如下规则:
			、两个操作数都是字符串,则是字符串拼接。
			、一个操作数是字符串,将非字符串的操作数转化为字符串进行拼接。
			、如果一个操作数是对象、数值、布尔值、则调用他们的toString()方法取得相应的字符串值,然后应用上述两条规则。
			、对于undefined和null,则分别调用String()方法取得字符串进行拼接。
	减法(-)
		规则如下:
			、两个操作数都是数值,执行算数运算。
			、一个操作数为NaN,返回NaN。
			、Infinity 减 Infinity,返回NaN。
			、-Infinity 减 -Infinity ,返回NaN。
			、Infinity 减 -Infinity ,返回Infinity。
			、-Infinity 减 Infinity,返回-Infinity。
			、+0 减 +0 返回+0;
			、+0 减 -0 返回-0;
			、-0 减 -0 返回+0;
			、如果一个操作数是字符串、布尔值、null或undefined,则先调用Number()方法转为数值,再根据以上规则执行。
					如果转换结果是NaN,则返回NaN。
			、如果有一个操作数是对象,则调用对象的valueOf()方法取得对象的数值,如果转换结果是NaN,则返回NaN。
					如果对象没有valueOf()方法,则调用其toString()方法,并将得到的字符串转换为数值进行如上规则。
	相等操作符(==)和不等操作符(!=)
		null == undefined  返回 true
		"NaN"== NaN        返回 false
		NaN == NaN         返回 false
		5 == NaN           返回 false
		NaN != NaN         返回 true
		false == 0	       返回 true
		true == 1	       返回 true
		true == 2	       返回 false
		undefined == 0	   返回 false
		null == 0	       返回 false
		"5" == 5	       返回 true
	全等和不全等
		===    !==
	条件运算符:? : 
	赋值操作符:=
				*=
				/=
				+=
				-=
				%=
	左移/赋值   <<=
	有符号右移/赋值	>>=
	无符号右移/赋值	>>>=
逗号操作符:,

欢迎star本人github:https://github.com/flyku

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值