05.js运算符(操作符)

1.算术运算符

+ - * / %

加 减 乘 除 取余

加法运算:

  • 与字符串的加法运算,会将其转换为字符串类型,再进行拼串
  • Object, Array 在运行加法的时候会用 .toString转为字符串,然后参考第一条。

其他运算:

  • 都是将其转换成Number类型,然后再运算
  • NaN不管和谁运算结果都是NaN
  • Infinity和正常数字+,- ,*, /运算依然是Infinity,反之是NaN;%运算时等于NaN
  • 当0作为除数时,结果是±Infinity
  • 最好不要进行浮点数运算,因为不精确
//🎈正常数字运算
console.log( 1 + 1);//2
//🎈浮点数运算
console.log( 0.1 + 0.2);//0.30000000000000004
//🎈Infinity和NaN运算
console.log( Infinity - 100);//Infinity
console.log( -Infinity / 100000000);//-Infinity
console.log( Infinity +  -Infinity );//NaN
//Infinity该值在js中表示无穷,是无法参与运算的,因为无法解析
console.log( NaN + Infinity );//NaN
console.log( NaN + -Infinity );//NaN
//🎈字符串加法运算
var str1 = '世间所有相遇';
var str2 = '都是久别重逢';
console.log( str1 + str2);//'世间所有相遇都是久别重逢'
console.log( {name: 'chonger'} + 'hailou');//[Object,Object]hailou
console.log( undefined + 'abc' );//undefinedabc
console.log( null + 'abc' );//nullabc
console.log( '1' + [1,2,3] );//11,2,3
//🎈Object Array 加法运算
console.log( {age: 5} + 5 );//[object Object]5
console.log( undefined + [{}] );//undefined[object Object]
console.log( null + [] );//null
//其他运算示例:
console.log( {} - -100 );//NaN
console.log( ['1'] - 1 );//0
console.log( Infinity / Infinity );//NaN
console.log( 2 / 0 );//Infinity 
console.log( -2 / 0 );//-Infinity
console.log( true / {} );//NaN
console.log( -Infinity % 2 );//NaN
2.一元运算符

+(正号) -(负号)

3.自增和自减

++ --

在自身的基础上增1或减1。

++ --操作符会把后边的数据类型转为数字然后再+1.

++操作符后置,先运算再自增;++操作符前置,先自增再运算;自减同理

var b =20;
var result = b++ + ++b + b;
//	result = 20  + 22  + 22;
console.log(result);//64
4.逻辑运算符

! (非) &&(与) ||(或)

会把所有的数据都转化成为布尔值,Boolean();

0 NaN undefined null false “” 六个大爷,在用Boolean转化为布尔值的时候是false

——>取反运算

var a = false;
a = !a;//两次取反,则不会变化:a = !!a;
console.log(a);//true
//对非布尔值进行非运算:先将其转换为布尔值,再运算【隐式类型转换】
var b = 0;
b =!b;
console.log(b);//true

&& (短路与) <通关游戏>

规则:同真为真,一假都假。如果第一个值为false,则不看后边的值。

从左往右 先把左边的数据转化为布尔值,如果为false,如果为true继续下一关

对非布尔值的运算:

  • 两个值都为true,则返回后边的值;如果第一个值为true,必然返回第二个值。
  • 两个值都为false,则返回前边的值;如果第一个值为false,直接返回第一个值。
  • 如果第一个值是NaN或Undefined,Null,直接返回该值。
var result =true && true;//true
var result =1 && 2;//2
console.log(  undefined && 2  );//undefined

||(短路或)<寻找生命中的唯一>

规则:同假为假,一真都真。如果第一个值为true,则不看后边的值。

从左往右 先把左边的数据转化为布尔值,如果为true停止,如果为false继续找

对非布尔值的运算:

  • 如果第一个值为true,则直接返回第一个值;
  • 如果第一个值为false,则返回第二个;
5.赋值运算符

将符号右侧的值赋值给符号左侧的值

*= += -= = /= %=

eg:a = a + 5等价于a += 5.以此类推

关于逗号操作符:同时声明变量并赋值

var a=1, b=2;

6.关系运算符

比较值之间的大小关系,关系成立返回ture,不成立返回false

> >= < <=

非数值情况:

  • 会将其先转换成数字再比较;(ture为1,false为0)
  • 如果符号两侧都是字符串,不会将其转换为数字,而是利用其Unicode编码再比较;
console.log(1 > ture);//false
console.log(1 >= ture);//true
console.log(1 > "0");//true
console.log(10 > null);//true
//任何值和NaN做任何比较都是false
console.log(10 <= "hello");//false
console.log(ture > false);//true
//两侧都是字符串
console.log("1" < "5");//ture
//a编码为0061,b编码为0062
console.log("a" < "b");//true
//比较字符编码时,是一位一位比较(第一位与第一位比,第二位与第二位..);如果两位的第一个值一样,则比较下一位
console.log("abc" < "b")//true
console.log("bbc" < "b");//false
//以下情况是第一个1的编码小于5的编码,因此第二个1并未参与比较
console.log("11" < "5");//true
//为解决上边两个字符串型的数字产生的问题,解决方案:转型--->添加个+
console.log("11231" < +"5");//false

console.log( undefined > -5 );//false
console.log( null > -1 );//true
//涉及到NaN的是false
 console.log( {} > false );//false
7.Unicode编码

(1)当输出一个Unicode中的字符时,在字符串中使用转义字符输入Unicode编码。格式:\u四位编码

<script type="text/javascript">
	console.log("\u2620")
</script>

(2)在网页中输出一个Unicode字符时,利用&#编码,这里的编码需要十进制,而Unicode编码是十六进制(利用计算机转换就成)

<body>
	<h1>&#9760;</h1>
</body>
8.相等运算符

用来比较两个值是否相等,相等返回true,否则返回false

== != === !==

相等 不等 全等 不全等

eg:a == 4; a != 4;

  • 若值的类型不同,将其转换为相同类型再比较,一般转换为Number;

  • 当进行!=运算时,即使转换类型后再比较,也是返回false;

  • 全等运算不进行类型转换,类型不同,直接返回false;

  • 不全等运算不进行类型转换,类型不同,直接返回true;

console.log("1" == 1);//true
console.log(true == "1")//true
//特殊
console.log(null == 0);//false
console.log(undefined == null);//true
console.log(undefined === null);//false
//NaN不和任何值相等,包括其本身
console.log(NaN == undefined);//false
	//那么当判断一个值是否是NaN时:
	var b == NaN;
	console.log(b == NaN);//(此时一定会false)
		//解决方案:可以通过isNaN()函数来判断一个值是否时NaN
		var b == NaN
		console.log(isNaN(b));
9.条件运算符(三元)

语法:条件表达式 ? 语句1: 语句2;

执行流程:
在这里插入图片描述

var a = 30;
var b = 20;
var c = 50;
//获取a和b 中的最大值
var max = a > b ? a : b;
//获取a b c 中的最大值
max = max > c ? max : c;
console.log("max = "+max);
//合并为一行,获取a b c中的最大值(不建议使用,不方便阅读)
var max =a > b ? (a > c ? a : c) : (b > c ? b : c);
//当求值结果为非布尔值,先将其转换成布尔值,再运算
"hello" ? alert("语句1") :("语句2");//语句1
"" ? alert ("语句1") :("语句2");//语句2
10.运算符优先级

优先级一样高,则从左往右计算。忘记优先级高低时,用()解决

1.()
2.!,--,++,正号,负号
3.*,/
4.+,-
5.<,>,>=,<=
6.==!====!==
7.&&
8.||
9.?:
10.=,+=,-,-=,*=,/=,%=(赋值运算)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值