JavaScript学习笔记四 运算符

一、运算符

运算符也叫操作符,通过运算可以对一个或多个值进行运算,并获取结果。
比如typeof就是运算符,可以来获取一个值的类型。它将该值的类型以字符串的类型返回

二、算数运算符

  • 当对非Number的值进行运算时,首先会将值转换为数字类型,true是1,false是0。
  • 任何数和NaN做运算,得到的值都是NaN。
  • 任何值做减、乘、除运算时,都会将值先转换成Number类型。运算后的返回值类型也是Number类型,我们可以运用这一特点进行类型转换,将数值进行-0;*1;/1得到的结果不变,值的类型转换为Number类型了。原理和Number()函数一样,使用起来更加简单一点。
            var a="123";
			var b=a-0;//var b=a*1;var b=a/1;减法,乘法,除法操作
			console.log(b);//结果是123
			console.log(typeof b);//数据类型是number
  • 任何值和字符串做加法运算时,首先将非字符串的类型转换成字符串类型,将任意值类型加上空串"",就可以将任意值的类型转换为字符串String类型。这是一种隐式的类型转换,由浏览器自动完成,实际上也是调用了String()函数。
            var a=123;//number类型
			a=a+"";//和空串相加
			console.log(a);
			console.log(typeof a);//输出类型为String类型

(1)加+:

  1. 数字+数字:将两个数进行加法操作并将结果返回
  2. 字符串+字符串:将两个字符串合成一个字符串,返回类型还是字符串类型,叫“拼串”。加号+可以进行换行
  3. 任何值+字符串:任何值和字符串相加,先将其转换为字符串,然后和字符串进行拼串操作,返回值类型是String字符串类型。
            var a=123;
			var b="a="+a;
			console.log(b);//a=123
			console.log(typeof b);//类型是String类型
练习:运算从左到右
            var a=1+2+"3";
			console.log(a);//33
			var b="1"+2+3;
			console.log(b);//123

(2)减-:

  1. 数字-数字:两个数字进行减法运算,并将结果返回。
  2. 数字-字符串:将字符串转换为数字,再进行数字-数字运算。如果字符串是非数字,输出结果是NaN。
            var a=100;
			var b=a-"1";
			console.log(b);//结果为99

(3)乘*:

  1. 数字*数字:两个值进行乘法运算,并将结果返回
  2. 数字字符串:将字符串转换为数字,再进行数字数字运算。

(4)除/:

  1. 数字*数字:两个值进行除法运算,并将结果返回
  2. 数字/字符串:将字符串转换为数字,再进行数字/数字运算。

(4)取模,取余数%:

  1. 两数相除取余数

三、一元运算符

一元运算符:只需要一个操作数

+正号:正号不会对数字产生影响
-负号:负号可以对数字进行取反作用

对于非Number类型的数,首先会将其转换为Number类型,然后再进行运算。

            var a=true;
			var b=-a;//先将true转变为Number类型1
			console.log(b);//结果是-1

可以对其他数据类型使用“+正号”使其变成Number类型。原理和Number()函数一样

           var a="123";//字符串类型
			var b=+a;//用“+”
			console.log(b);//123
			console.log(typeof b);//number

四、自增和自减

(1)自增++:通过自增可以使变量在自身的基础上加1

  1. 对于一个变量自增以后,原变量的值会立即自增1
  2. 自增分成两种:后++(a++)和前++(++a)

无论是a++,还是++a,都会立即使原变量的值自增1
不同的是a++和++a的值不同
a++的值等于原变量的值(自增前的值)
++a的值等于原变量新值(自增后的值)

var a=1;
console.log("a++="+ a++);//先赋值后+  结果是a++=1
console.log(a);//2
console.log("++a="+ ++a);//先+后赋值 结果是++a=3
console.log(a);//a=3
var a=10;
//10+12+12=34
console.log(a++ + ++a + a);

(2)自减–:通过自减可以使变量在自身的基础上减1

  1. 对于一个变量自减以后,原变量的值会立即自减1
  2. 自减分成两种:后–(a–)和前–(--a)

无论是a–,还是–a,都会立即使原变量的值自减1
不同的是a–和--a的值不同
a–的值等于原变量的值(自减前的值)
–a的值等于原变量新值(自减后的值)

五、逻辑运算符

JS中为我们提供了三种逻辑运算符

(1)!非:可以对一个值进行非运算

  • 所谓非运算就是对一个布尔值进行取反操作,true变false,false变true
  • 如果对一个值进行两次取反操作,则该值不变。
  • 如果对非布尔值进行非运算,则会将其转换为布尔值,然后再取反,所以我们可以利用该特点,可以将一个其他的数据类型转换为布尔值类型,可以为一个任意数据类型取两次反,来将其转换为布尔值

(2)&&与:

  • 可以对符号两侧的值进行与运算,并返回结果
  • 运算规则:两边同为true结果才为true,两边只要有一边为false则返回结果为false。
  • JS中的“与”是短路与,如果第一个值是false,则后面就不用管了,结果直接返回false

(3)||或:

  • 可以对符号两侧的值进行与运算,并返回结果
  • 运算规则:两边同为false结果才为false,两边只要有一个true,那返回结果就是true。
  • JS中的“与”是短路或,如果第一个值是true,则后面就不用管了,结果直接返回true。

(4)非布尔值的与、或运算

  • 对于非布尔值的与、或运算,首先会先将其转换为布尔值然后再进行运算并且返回原值。
  • 与运算:如果两个值都为true,则返回后面的值
var a=1 && 2;//转换为布尔值true&&true
console.log(a);//两个值都为true,结果返回后面的2
  • 与运算:如果两个值有一个为false,则返回为false的值
var a=0 && 1;//false && true 返回0
var a=1 && 0;//true && false 返回0
var a=NaN && 0;//false &&false 返回NaN
console.log(a);
  • 或运算:如果两个值都是true,则返回第一个值
  • 或运算:如果两个值中有一个true,则返回为true的值
	var a=1|| 2;//true||true 返回1
	console.log(a);
	var a=0 || 1;//false || true 返回1
	console.log(a);
	var a=1 || 0;//true || false 返回1
	console.log(a);
	var a=NaN || 0;//false ||false 返回0
    console.log(a);
  • 或运算:字符串空串是true,其余是false
var a=""||"hello";//false || true
console.log(a);//结果返回hello

六、赋值运算符

  1. 等号 = :将符号右侧的值赋值给符号左侧
  2. 加等于 += :a+=1等价于a=a+1。
  3. 减等于 -= :a-=1等价于a=a-1。
  4. 乘等于 * = :a* =1等价于a=a*1。
  5. 除等于 /= :a/=1等价于a=a/1。
  6. 模等于 %= :a%=1等价于a=a%1。

七、关系运算符

提供关系运算符可以比较两个值之间的大小关系,如果关系成立则返回true,不成立则返回false。

(1)数值情况比较

  1. 大于号> : 判断符号左侧的值是否大于右侧的,如果关系成立,返回true,如果关系不成立则返回false
var a=5>10;
console.log(a);//false
  1. 大于等于号>= :判断符号左侧的值是否大于或等于右侧的,如果关系成立,返回true,如果关系不成立则返回false。
  2. 小于号< :判断符号左侧的值是否小于右侧的,如果关系成立,返回true,如果关系不成立则返回false。
  3. 小于等于<= : 判断符号左侧的值是否小于或等于右侧的,如果关系成立,返回true,如果关系不成立则返回false。

(2)非数值的情况

  1. 对于非数值进行比较时,首先将非数值转换为数值,然后再进行比较。
var a=1>true; //true转换为1
console.log(a);//false

var a=1>null; //null转换为0
console.log(a);//true

var a=1>"你好"; //你好转换为NaN
console.log(a);//false,字符串转换为数字是NaN,无法比较,一律返回false
  1. 如果符号两边都是字符串,不会将其转换为数字进行比较,而会分别比较字符串中的Unicode编码。
var a="1" < "5";//true
var a="11" < "5";//true
console.log(a);
  1. 比较字符编码是一位一位进行比较,第一位比出来了的话后面就不用比较,如果第一位都一样,则比较下一位,可以借用它来对英文进行比较。比较中文无意义。
var a="a"<"b";//a的字符编码小于b
console.log(a);
		
var a="abc"<"b";//abc只比较第一位a
console.log(a);
  1. 如果比较的两个字符串型的数字,可能会得到不可预期的结果
    注意:在比较两个字符串型的数字时,一定一定一定要进行转型“+”
var a="1232142525256"< +"5";
		console.log(a); //false

八、Unicode编码表

在字符串中使用转义字符输入Unicode编码:\u四位编码

console.log("\u0054");//结果是1

在网页中使用Unicode编码:&#编码;这里需要的编码的是10进制,而unicode编码中提供的数字是16进制,当在网页中使用时需要将16进制转换为10进制。

九、相等运算符

(1)相等运算符:

比较两个值是否相等,如果相等会返回true,否则返回false。使用==来做相等运算

  1. 当使用==来比较两个值时,如果值的类型不同,则会自动进行类型转换,将其转换为相同的类型,然后再比较判断。
    不一定都是转换为number类型
console.log("1"==1);//字符串转换成1
console.log(null==0);//特殊情况,null未转换成number
  1. undefined衍生自null,所以这两个值做相等判断时,会返回true
console.log(undefined==null);//true
  1. NaN不和任何值相等,包括它本身。可以通过isNaN()函数来判断一个值是否是NaN.
var a=123;
console.log(isNaN(a));//false

(2)不等运算符:

不相等用来判断两个值是否不相等,不相等返回true,相等返回false。
使用!=来做不相等运算
不相等也会对变量进行自动的类型转换,如果转换后相等它也会返回false。

(3)全等===

用来判断两个值是否全等,和相等类似,不同的是它不会做自动的类型转换。
如果两个值的类型不同,直接返回false

(4)不全等!==

用来判断两个值是否不全等,和不等类似,不同的是它不会做自动的类型转换。
如果两个值的类型不同,直接返回true

十、条件运算符

条件运算符也叫三元运算符

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

(2)执行的流程:

条件运算符在执行时,首先对条件表达式进行求值
如果该值为true,则执行语句1,并返回执行结果;
如果该值为false,则执行语句2,并返回执行结果。

var a=10,b=20;c=50;
		//获取a和b中的最大值
		var max=a>b?a:b;
		//获取max和c中的最大值
		max=max>c?max:c;
		console.log("max="+max);
		
//这种写法不推荐,不方便阅读
var max=a>b?(a>c?a:c):(b>c?b:c);
		console.log("max="+max);

如果条件表达式的结果是非布尔值,会转换为布尔值后再进行判断。

十一、运算符的优先级

(1)逗号,运算符:可以分割多个语句,一般可以在声明多个变量时使用。
var a,b,c;
(2)运算符的优先级:和数学里面一样,先乘除后加减。
在JS中,有符号优先级的变,在表中,优先级越高越先计算,优先级一样,则从左往右计算。遇到优先级不清楚的可以通过()来改变优先级。

猜你喜欢

转载自blog.csdn.net/weixin_45636381/article/details/112568085
今日推荐