javascript笔记--(第五章)运算符

表达式


表达式是ECMAScript中的一个“短语”,解释器会通过计算把它转换成一个值。最简单的表达式是字面量或者变量名
function(n) {return x+y;}	//函数字面量、函数表达式
box				//变量

一元运算符

<script type="text/javascript">
	var box = '89';	box++;				
	console.log(box); //90,数值字符串自动转换成数值
	var box = 'ab';	box++;				
	console.log(box);  //NaN,字符串包含非数值转成NaN
	var box = false; box++;				
	console.log(box);  //1,false转成数值是0,累加就是1
	var box = 2.3; box++;				
	console.log(box);  //3.3,直接加1
	var box = {
		toString : function() {
			return 1;
		}
	};			
	box++;
	console.log(box);  //2,不设置toString或valueOf即为NaN
</script>
<script type="text/javascript">
	var box = '89';	box=+box;				
	console.log(box); //89,数值字符串自动转换成数值
	var box = 'ab';	box=+box;				
	console.log(box);  //NaN,字符串包含非数值转成NaN
	var box = false; box=+box;				
	console.log(box);  //0,false转成数值是0
	var box = {
		toString : function() {
			return 1;
		}
	};			
	box=+box;
	console.log(box);  //1,不设置toString或valueOf即为NaN
</script>
加法和减法运算符一般用于算术运算,也可像上面进行类型转换。

算术运算符


ECMAScript定义了5个算术运算符,加减乘除求模(取余)。如果算术运算的值不是数值,那么后台会先使用 Number()转型函数将简单类型值转换为数值(隐式转换),如果该值是对象,则先调用valueOf或者toString方法,再用Number()将其值转换成数值。
减法:
var box = 1 - NaN;				//NaN,只要有一个NaN就为NaN
var box = Infinity - Infinity;			//NaN
var box = -Infinity - -Infinity;		//NaN
var box = Infinity - -Infinity;			//Infinity
var box = -Infinity - Infinity;			//-Infinity
var box = 100 - true;				//99,true转成数值为1
var box = 100 - '';				//100,''转成了0

乘法:
var box = 100 * NaN;				//NaN,只要有一个NaN即为NaN
var box = Infinity * Infinity;			//Infinity
var box = -Infinity * Infinity ;			//-Infinity
var box = -Infinity * -Infinity ;		//Infinity

除法:
var box = Infinity / 0;//NaN
var box = Infinity / null;//NaN
var box = Infinity % Infinity;//NaN			
var box = -Infinity %  Infinity;//NaN
var box = -Infinity %  -Infinity;//NaN
var box = 100 %  0;//NaN
var box = 100 %  '';//NaN
var box = 100 %  null;//NaN

关系运算符


和其他运算符一样,当关系运算符操作非数值时要遵循一下规则:
1.两个操作数都是数值,则数值比较;
2.两个操作数都是字符串,则比较两个字符串对应的字符编码值;
3.两个操作数有一个是数值,则将另一个转换为数值,再进行数值比较;
4.两个操作数有一个是对象,则先调用valueOf()方法或toString()方法,再用结果比较;

相等和不等的比较:
两个操作数都是对象,则比较他们是否是同一个对象,如果都指向同一个对象,则返回true,否则返回false
在全等和全不等的判断上,比如值和类型都相等,才返回true,否则返回false


注意:null在进行等于或者全等比较时,并不会先把值用Number()转换为0
(补充:null>=为true,null<=0为true,null>0为false,null<为false,之所以会这样,是因为在进行>和<时候会将null转换成0,而>=的结果其实是取<的反,<=同理。)

逻辑运算符


有三个逻辑运算符:逻辑与(AND)、逻辑或(OR)、逻辑非(NOT)。

逻辑与&&:
如果两边的操作数有一个操作数不是布尔值的情况下,与运算就不一定返回布尔值,此时,遵循已下规则:
  • 1.第一个操作数是对象,则返回第二个操作数;
  • 2.第二个操作数是对象,则第一个操作数返回true,才返回第二个操作数,否则返回false;
  • 3.有一个操作数是null,则返回null;
  • 4.有一个操作数是undefined,则返回undefined。
总结上面几点就是:与运算符在运算时,如果第一个数在转换成布尔值的情况下是false则返回第一个操作数(原值,不一定是布尔值),否则返回第二个操作数

逻辑或||:
如果两边的操作数有一个操作数不是布尔值的情况下,逻辑与运算就不一定返回布尔值,此时,遵循已下规则:
  • 1.第一个操作数是对象,则返回第一个操作数;
  • 2.第一个操作数的求值结果为false,则返回第二个操作数;
  • 3.两个操作数都是对象,则返回第一个操作数;
  • 4.两个操作数都是null,则返回null;
  • 5.两个操作数都是NaN,则返回NaN;
  • 6.两个操作数都是undefined,则返回undefined;
总结上面几点就是:或运算符在运算时,如果第一个数在转换成布尔值的情况下是true则返回第一个操作数(原值,不一定是布尔值),否则返回第二个操作数

逻辑非!:
逻辑非运算符可以用于任何值。无论这个值是什么数据类型,这个运算符都会返回一个布尔值。它的流程是:先将这个值转换成布尔值,然后取反。
var box = !(5 > 4);				//false
var box = !{};					//false
var box = !'';					//true
var box = !0;					//true
var box = !null;				//true
var box = !NaN;					//true
var box = !undefined;				//true



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值