03.JS运算符
前言:
学习一门编程语言的基本步骤
(01)了解背景知识
(02)搭建开发环境
(03)语法规范
(04)常量和变量
(05)数据类型
(06)数据类型转换
(07)运算符
7.运算符
表达式:由运算符连接的操作数据,所组成的形式。
运算符分为算数运算符,比较运算符,逻辑运算符,位运算符,赋值运算符,三目运算符
(1)算术运算符——math
+ (加)
//加 console.log(3+2);//5
- (减)
//减 console.log(3-2);//1
* (乘)
//乘 console.log(3*2);//6
/ (除)
//除 console.log(3/2);//1.5
% (取余)隔行换色,判断是否为闰年
//取余 console.log(3%2);//1 console.log(2%3);//2
++(自增)在原来的基础上加1
//自增 var a=1; //此时a值是1 a++; //在原来的基础上加1,此时a值是2 console.log(a); //获取加1之后的a,此时a值是2 console.log(a++);//在a=2的基础上加1,此时a值为3,存在内存之中, console.log(a); // 重新获取a值,a值为3
--(自减)在原来的基础上减1
//自减 var b=3; //此时b值是3 b--; //在原来的基础上减1,此时b值是2 console.log(b); //获取减1之后的b,此时b值为2 console.log(b--); //在b=2的基础上减1,此时b值为1,存在内存当中 console.log(b); //重新获取b值,b值为1
console.log(a++);先打印a的值,在执行自增
// 先打印a的值,在执行自增 //1.声明一个变量 var a=1; //此时a还是1,打印就是1,打印完后,在执行自增,这时候a变成2,存在内存当中 console.log(a++);//输出为1 //重新从内存中获取a的值 console.log(a);//输出为2
console.log(++a);先执行自增,在打印a的值
//先执行自增,在打印a的值 //2.声明变量a var a=1; //先让a的值执行自增,此时a的值变成了2,然后在打印a的值就是2 console.log(++a);//输出为2 //重新获取值也是2 console.log(a);//输出为2 //综合 var num=3; //第一个num的值打印为3,但是内存为2,影响内存中的储存的值,然后后面的num取内存中的值,所以是1,3+1=4, console.log(num--+--num);//4
(2)比较运算符——compare
返回都是一个布尔型的值,如果数据类型不同,会发生数据类型的转换
> (大于)
//> 大于 console.log(3>4);//false
< (小于)
//< 小于 console.log(3<4);//true
>= (大于等于)
//> 大于等于 console.log(3>=4);//false
<= (小于等于)
//< 小于等于 console.log(3<=4);//true
== (等于) 比较两个值是否相等
//== 等于 只比较值,不比较类型 console.log(7=='7');//ture
!= (不等于)
//!=不等于 console.log(3!=4);//true console.log(3!=3);//false console.log(3!='3');//false 仅比较值
=== (全等于) 不仅比较值,还会比较类型是否相等
//=== 全等于 比较值和类型 console.log(7==='7');//false
!== (全不等于)
//!==不等于 console.log(3!==4);//true console.log(3!==3);//false console.log(3!=='3');//true 比较值和类型
数据类型的转换
//数字类型转换 字符串转成了数字 console.log(13>'10');//ture //两个字符串比较,比较的是首个字符的Unicode码,3——> 51 1——> 49 a——> 97 console.log('3'>'10');//true console.log('张铁牛'>'张大柱');//true console.log('张'.charCodeAt()>'张'.charCodeAt());//false console.log('铁'.charCodeAt());//38081 console.log('牛'.charCodeAt());//29275 console.log('大'.charCodeAt());//22823 console.log('柱'.charCodeAt());//26609
NaN和任何值比较(> < >= <= == === != !==),包括自身,都返回false。
//NaN和任何值比较 //3>NaN console.log(3>'10a');//false //3<NaN console.log(3<'10a');//false //3>=NaN console.log(3>='10a');//false //3<=NaN console.log(3<='10a');//false //3==NaN console.log(3=='10a');//false //3===NaN console.log(3==='10a');//false //NaN==NaN console.log(NaN==NaN);//false //NaN===NaN console.log(NaN===NaN);//false //3!=NaN console.log(3!='10a');//true //3!==NaN console.log(3!=='10a');//true
(3)逻辑运算符——logic
and && 并且 关联的两个条件都满足,结果是ture否则是false
//并且 && //判断一个人的工资是否在5000-8000支间 var salary=7000; console.log(salary>=5000 && salary<=8000);//true //声明两个变量,分别保存用户名和密码,如果用户名为root,并且密码为123456,打印true,否者false。 var uname="root"; var password="123456"; console.log(uname==="root" && password==="123457");//false
or || 或者 关联的两个条件满足其一,结果是ture,否者是false
//或者 || //判断是否满足让座标准,儿童12岁以下或者老人65岁以上 var age=50; console.log(age<=12 || age>=65);//false //声明变量保存用户,如果使用用户名root或者使用手机号码18112345678,满足其一,打印true,否者false var uname="root"; var uname="18112345678"; console.log(uname==="root" || uname==="18112345678");//true
! 非 取反向 !ture=false !false=true
//取反向 ! var r=true; console.log(!r);//false
(4)逻辑短路,关注点不在结果是真假,关注点在后面的程序是否会执行!!!
and=&& 并且 当第一个条件为false的时候,就不需要在执行第二条件
//逻辑短路 //and=&& 并且 当第一个条件为false的时候,就不需要在执行第二条件 var num=3; num>5 && console.log(num);//false,不执行后续 num<5 && console.log(num);//3
or = || 或者 当第一个条件为true的时候,就不需要执行第二条件
注意事项:逻辑短路无需关注运算符的整个逻辑计算的结果是ture还是false,重点看是否会执行第二条件。
//or= || 或者 当第一个条件为true的时候,就不需要执行第二条件 var num=3; num>1 || console.log(num);//true,后续不执行 num<1 || console.log(num);//前面为false,继续执行,结果3 //综合:变量保存年龄,如果满18周岁,打印"成年人" var age=19; console.log(age>=18 && "成年人");//成年人
(5)位运算符(了解即可)
在执行运算的时候,计算机会把数据转成二进制,来进行运算
按位于 (&),上下两位都是1,结果是1,否则是0.
//按位于(&),上下两位都是1,结果是1,否则是0. /* 011 101 ———— 001 */ console.log(3&5);//1
按位或 (|),上下两位含有1,结果是1,否者是0,
//按位或 (|),上下两位含有1,结果是1,否者是0, /* 101 111 ———— 111 */ console.log(5|7);//7
按位异或(^) ,上下两位不同为1,相同为0.
// 按位异或(^) ,上下两位不同为1,相同为0. /* 101 111 ———— 010 */ console.log(5^7);//2
按位右移(>>),删除二进制的最后一位,成倍减少
//按位右移(>>),删除二进制的最后一位,每增加一次右移,结果成倍减少一次 console.log(8>>1);//4 console.log(8>>2);//2 console.log(8>>3);//1
按位左移(<<),在最后一位增加一位0,成倍增长
// 按位左移(<<),在最后一位增加一位0,每增加一次左移,结果成倍增长一次 console.log(5<<1);//10 console.log(5<<2);//20 console.log(5<<3);//40
(6)赋值运算符
= 等于
//等于 var a=1;//给a赋值为1
+= 加等于
//加等于 //运算符的优先级,+号优先于=号 var a=1; //第一种写法,在原来基础上+1,把结果赋给a a=a+1; console.log(a); //第二种写法,在原来基础上+1,把结果赋给a a+=1; console.log(a); //在赋值运算符中,加等于可以用于字符串拼接 var str='a'; str+='b'; console.log(str);//'ab'
-= 减等于
//减等于 var a=5; //普通写法 a=a-1; console.log(a);//4
*= 乘等于
//乘等于 //打八折,在原来的基础上打八折 var price=1500; //赋值运算符写法 price*=0.8; console.log(price);//1200
/= 除等于
//除等于 //总分数552,求6科平均成绩 var score=552; score/=6; console.log(score);//92
%= 取余等于
//取余等于 //注意:运算符的优先级:先执行并且,再执行或者; //声明变量保存一个年份,判断这个年份是否为闰年,结合逻辑短路,如果是闰年就打印闰年 var year=1999; (year%4===0 && year%100!==0 || year%400===0) && console.log("闰年");//false
(7)三目运算符
一目:一个运算符连接一个数据
a++ b-- !c
二目:一个运算符连接两个数据
a+1 a-1 a*1 a/1 a>1 a<1 a=1 a!1等等
三目:两个运算符连接三个数据
条件表达式?表达式1:表达式2
如果条件表达式为ture执行表达式1,
如果条件表达式为false执行表达式2
//三目运算符 //根据年龄判断是否为成年人 var age=19; age>=18?console.log('成年人 '):console.log('未成年人');//成年人 //声明两个变量来保存用户名和密码,如果用户名为root,并且密码为123456,打印成功,否则打印失败 var uname='rot'; var pwd='123456'; (uname==='root' && pwd==='123456') ? console.log('登录成功'):console.log('登录失败');//登录失败 var uname1='root'; var pwd1='123456'; (uname1==='root' && pwd1==='123456') ? console.log('登录成功'):console.log('登录失败');//登录成功