前端day06--JavaScript操作符

操作符

算数操作符、位操作符、关系操作符、相等操作符

一元操作符

一元操作符就是能操作一个值的操作符。

自增自减操作符

前置型:++a,–a
后置型:a++,a–

var num1 = 2;
var num2 = 20;
var num3 = num1-- + num2;//22
var num4 = num1 + num2;//21
//区别于下面
var num1 = 2;
var num2 = 20;
var num3 = --num1 + num2;//21
var num4 = num1 + num2;//21

num–:在运算中,先取num值,再做运算
++num:在运算时,先让num的值+1,再做运算

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

一元加和减操作符

var num = 25;
num = +num;//num的值还是25
num = -num;//num的值变成了-25

var s1 = "4";
s1 = +s1;//s1从字符串变成了数值4

+、- 可以使其他任意类型数值变为Number类型。

位操作符

按位非(~)

var num1 = 25;
var num2 = ~num1;
alert(num2);//-26

本质:操作数的负值-1

按位与(&)

在两个数值对应位都是1时才为1

var num1 = 25 & 3;
alert(num1);//1

原因:将25和3变为二进制后进行按位与操作

25 = 0000 0000 0000 0000 0000 0000 0001 1001
03 = 0000 0000 0000 0000 0000 0000 0000 0011
----------------------------------------------
	 0000 0000 0000 0000 0000 0000 0000 0001

只有1位同时为1

按位或(|)

两个数值对应位都为0时返回0

var num1 = 25 | 3;
alert(num1);//27
25 = 0000 0000 0000 0000 0000 0000 0001 1001
03 = 0000 0000 0000 0000 0000 0000 0000 0011
----------------------------------------------
	 0000 0000 0000 0000 0000 0000 0001 1011

按位异或(^)

两个数值对应位上的数值不同时返回1

var num1 = 25 ^ 3;
alert(num1);//26

25 = 0000 0000 0000 0000 0000 0000 0001 1001
03 = 0000 0000 0000 0000 0000 0000 0000 0011
----------------------------------------------
	 0000 0000 0000 0000 0000 0000 0001 1010

左移(<<)

var num1 = 2;//二进制的10
var num2 = num1<<5;//二进制的1000000,十进制的64

var num3 = -2;//二进制的-10
var num4 = num1<<5;//二进制的-1000000,十进制的-64

有符号的右移(>>)

数值向右移动,但保留符号位

var num1 = 64;//二进制的1000000
var num2 = num1>>5;//二进制的10,十进制的2

无符号的右移(>>>)

对于正数来说,无符号的右移与有符号的右移结果相同
对于负数来说:
不保留符号位

var oldValue = -64;
var newValue = oldValue >>> 5;
---------------------------------------------------
-64 = 1111 1111 1111 1111 1111 1111 1100 0000
new = 0000 0111 1111 1111 1111 1111 1111 1110

布尔操作符

逻辑非(!)

alert(!false);//true
alert(!"blue");//false
alert(!0);//true
alert(!NaN);//true
alert(!"");//true
alert(!12345);//false

逻辑与(&&)

两个操作数都是真时,返回真
在有一个操作数不是布尔值的情况下,逻辑与操作不一定返回布尔值。

  • 若第一个操作数是对象,则返回第二个操作数
  • 若第二个操作数是对象,则只在第一个操作数的求值结果为true的情况下才会返回该对象。
  • 若两个操作数都是对象,则返回第二个操作数。
  • 若第一个操作数是null、NaN、undefinded,则返回null、NaN、undefinded

逻辑与是短路操作,如果第一个操作数能决定结果,就不会对第二个操作数求值

var found = true;
var result = (found && someUndefindVariable);//someUndefindVariable未定义,发生错误
alert(result);//不会执行
var found = false;
var result = (found && someUndefindVariable);//someUndefindVariable未定义,但不会发生错误
alert(result);//执行

逻辑或(||)

两个操作数都是假时,返回假
在有一个操作数不是布尔值的情况下,逻辑与操作不一定返回布尔值。

  • 若第一个操作数是对象,则返回第一个操作数
  • 若第一个操作数的求值结果为false,则返回第二个操作结果
  • 若两个操作数都是对象,则返回第一个操作数。
  • 若第一个操作数是null、NaN、undefinded,则返回null、NaN、undefinded

逻辑或也是短路操作。

利用逻辑或的短路行为来避免为变量赋null或者undefined的值。

var myObject = preferredobject || backupObject

变量preferredobject 包含优先赋给myObject的值,变量backupObject负责在perferredobject中不包含有效值的情况下提供后备。
如果perferredObject的值不是null,则将它赋给myObject;如果perferredObject的值为null,则将backupObject的值赋给myObject。

乘性操作符

乘法,除法,求模

乘法(*)

  • 如果两个操作符都是数值,执行常规的乘法计算。两个正数相乘或两个负数相乘结果还是正数。如果有只有一个操作符有符号,结果就是负数。
  • 如果有一个操作数是NaN,结果就是NaN
  • Infinity与0相乘,结果还是Infinity
  • Infinity与非0数值相乘,结果为Infinity或者-Infinity
  • 如果有一个操作数不是数值,则在后台调用Number()将其转换为数值在进行操作。

除法(/)

  • 如果两个操作符都是数值,执行常规的乘法计算。两个正数相乘或两个负数相乘结果还是正数。如果有只有一个操作符有符号,结果就是负数。
  • 如果有一个操作数是NaN,结果就是NaN
  • Infinity被infinity除,结果是NaN
  • 0被0除,结果是NaN
  • 非零的有限数被零除,结果是Infinity或-Infinity
  • Infinity被任何非零数除,结果是Infinity或者是-Infinity
  • 如果有一个操作数不是数值,则在后台调用Number()将其转换为数值在进行操作。

求模(%)

  • 若操作数都是数值,执行常规的除法运算
  • 若被除数是无穷大值而除数是有限大的值,结果为NaN
  • 若被除数是有限大值而除数是0,结果为NaN
  • Infinity被infinity除,结果是NaN
  • 若被除数是有限大值而除数是无穷大的值,结果为被除数
  • 被除数是零,结果为0
  • 如果有一个操作数不是数值,则在后台调用Number()将其转换为数值在进行操作。

加性操作符

加法 减法

加法(+)

  • 有一个操作数是NaN,结果是NaN
  • Infinity+Infinity = Infinity
  • -infinity±infinity = -infinity
  • infinity+ -infinity = NaN
  • 0+0=0
  • -0+ -0= -0
  • -0+0 = 0
  • 如果两个操作数都是字符串,则拼接
  • 有一个是字符串,将另一个转换为字符串然后拼接
var num1 = 10;
var num2 = 220;
var message = "The result is"+num1+num2;
alert(message);//"The result is 10220"

修改:

var num1 = 10;
var num2 = 220;
var message = "The result is"+(num1+num2);
alert(message);//"The result is 230"

减法(-)

  • 有一个操作数是NaN,结果是NaN
  • 同号Infinity相减结果为NaN
  • 异号Infinity相减结果为Infinity,符号和被减数相同
  • 0-0=0
  • -0- 0= -0
  • -0- -0 =0
  • 如果有一个操作数为字符串,布尔值,null,undefinded,则先调用Number()将其转换为数值,在计算.
  • 如果有一个操作数是对象,调用valueOf()或toString()方法取得数值,再进行运算

关系操作符

var result = "Brick"<"alphabet";//true,比较的是字符编码
result = "Brick".toLowerCase()<"alphabet".toLowerCase();//false
result = "23"<"3";//true,两个都是字符串,比较的是编码
result = "23"<3;//false,“23”变成了数值
result = "a"<3;//false,"a"变成了NaN

var result1 = NaN>3;//false
var result2 = NaN<=3;//false
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值