我理解的JavaScript运算符

JavaScript运算符

ECMA-262 描述了一组用于操作数据值的操作符,包括算术操作符(如加号和减号)、位操作符【现在暂进不考虑】、 关系操作符和相等操作符。这些操作符可以运用于我们的很多数据类型,它不像我们其它编程语言,操作符只对某些数据支持

一元操作符

只能操作一个值的操作符我们叫一元操作符。
一元加减操作符在我们的JS里面最主要的作用就是类型转换。
例题:
var a = “01”;
a = -a;
console.log(a);
运行结果:
在这里插入图片描述
一元加减操作符其实就是对当前的变量调用了Number 的方法来进行转换;
一元减操作符就是将当前变量通过Number方法转换以后再乘以-1,它的结果是一个负数;
总结 :一元操作符最终所得到的结果一定是一个数字类型

递增递减操作符

在原有的数值上面进行相加或相减。
如果不是Number类型的数据执行了递加的操作,它会先通过Number()这个方法去转换一次,然后再操作。
递增操作里面:

  1. ++在后面是先使用这个变量,再把这个变量+1
  2. ++在前面是先把自己+1,再使用这个变量
    递减操作和递增操作一样。
    例题:
    /* var a = 10;
    var b = 20;
    var c = 30;

++a; //11
a++; //11
// 13 21 30 13
var d = ++a + (++b) + (c++) + a++;

console.log(d); //77 */

加法操作符 +

操作原则

  1. 如果两个数都数字,则直接相加
  2. 如果其中有一个是字符串,另一个是字符串,结果是一个拼接型的字符串
  3. 如果都是字符串,则直接拼接
  4. NaN是一个特殊的数字类型,除了与字符串相加外,跟其它任何值相加都是NaN
  5. 数字与布尔类型相加,undefined或null相加,调用Number方法去转换一次,然后再相加
  6. 如果相加的两个值不是数字类型,也不是字符串类型,则整体通过Number去转一次,再按照上面的前4条去操作(所以在加法的操作符里有一个隐形的规则 ,字符串是老大,NaN是老二,其它的都通过Number转)
    例题:
    /* console.log(1+2); //3
    console.log(“1”+2); //12
    console.log(true+1); //2
    console.log(true+“1”); //true1
    console.log(NaN+1); //NaN
    console.log(NaN+true); //NaN
    console.log(NaN+“1”); //NaN1
    console.log(“1”+“2”); //12
    console.log(1+undefined); //NaN
    console.log(“1”+undefined); //1undefined
    console.log(1+null); //1
    //现在在来一看一些不常见的加法运算
    console.log(true+true); //2
    console.log(true+undefined); //NaN
    console.log(true+null); //1 */

减法操作符 -

  1. 减法操作符得到的结果一定是一个Number类型
  2. NaN与任何值相减都是NaN
  3. 如果执行减法的不是数字,则通过Number去转换一次(减法操作符也有一个隐藏规则,数字是老大,NaN是老二,其它类型通过Number转)
    例题:
    console.log(2 - 1); //1
    console.log(“2” - 1); //1
    console.log(“2” - “1”); //1
    console.log(“2” - true); //1
    console.log(2 - false); //2
    console.log(1 - null); //1
    console.log(2 - undefined); //NaN
    console.log(2 - NaN); //NaN
    console.log(null - true); //-1
    console.log(“a” - 1); //NaN
    console.log(“a” - “b”); //NaN
    console.log("" - 1); //-1
    console.log("" - NaN) //NaN

乘法操作符 *

操作原则

  1. 乘法操作符得到的结果一定是一个Number类型
  2. NaN与任何值相乘都是NaN
  3. 如果执行乘法的不是数字,则通过Number去转换一次
    例题:
    console.log(2 * 1); //2
    console.log(“2” * 1); //2
    console.log(“2” * “1”); //2
    console.log(“2” * true); //2
    console.log(2 * false); //0
    console.log(1 * null); //0
    console.log(2 * undefined); //NaN
    console.log(2 * NaN); //NaN
    console.log(null * true); //0
    console.log(“a” * 1); //NaN
    console.log(“a” * “b”); //NaN
    console.log("" * 1); //0
    console.log("" * NaN) //NaN

除法操作符 /

操作原则

  1. 除法操作符得到的结果一定是Number类型
  2. NAN与任何数相除都是NaN
  3. 如果执行除法的不是数字,则通过Number去转换一次
  4. 如果被除数为0,则最终的结果为Infinity无穷大
    例题:
    console.log(2 / 1); //2
    console.log(“2” / 1); //2
    console.log(“2” / “1”); //2
    console.log(“2” / true); //2
    console.log(2 / false); //infinity
    console.log(1 / null); //infinity
    console.log(2 / undefined); //NaN
    console.log(2 / NaN); //NaN
    console.log(null / true); //0
    console.log(“a” / 1); //NaN
    console.log(“a” / “b”); //NaN
    console.log("" / 1); //0
    console.log("" / NaN) //NaN

取余操作符 %

操作原则

  1. 取余操作符得到的结果一定是Number类型
  2. 如果在操作的时候有NaN,则结果就是NaN
  3. 如果执行取余的不是数字,则通过Number去转换一次
  4. 如果除数为0,则最终它的余数的结果为NaN;被除数为0,最终取余结果为 0
    例题:
    console.log(10 % 3); //1
    console.log(“10” % 3); //1
    console.log(“10” % “3”); //1
    console.log(“2” % true); //0
    console.log(2 % false); //NaN
    console.log(1 % null); //NaN
    console.log(2 % undefined); //NaN
    console.log(2 % NaN); //NaN
    console.log(NaN % 2); //NaN
    console.log(null % true); //0
    console.log(“a” % 1); //NaN
    console.log(“a” % “b”); //NaN
    console.log("" % 1); //0
    console.log("" % NaN); //NaN

赋值运算符 =

它使用我们的=来进行,,从右往左赋值
a=a+5
高级写法:
a += 5;
a -= 5;
a *= 5;
a /= 5;

相等操作符 ==

在JS的编程里面,我们经常要对两个变量进行判断 ,看他们是否相等。JS在判断相等的时候有两种情况

简单的相等,通过符号==来表示

简单的相等是判断 等号两边的值是否相等,如果等号两边的数据类型不相同,则会自动调用Boolean(),Number()或String()这三个方法进行类型转换

全等,通过符号===来表示
判断原则

  1. null与undefined是相等的,除此之外与任何值都不相等
  2. NaN不与任何值相等,包括它自身
  3. 如果一个操作数是字符串,另一个操作数是数值,在比较之前先将字符串转为数值
  4. 布尔类型转换成数字,true就为1,false就为0
  5. 在比较相等之前,不能将nullundefined转换成任何类型(它们如果参于了比较,不能做类型转换)
    例题:
    console.log(12);
    console.log(1
    1);
    console.log(1true);
    console.log(0
    false);
    console.log(“0”==false);
    //-------------------------
    console.log(“10"10);
    console.log(""0);
    console.log(NaN
    0);
    console.log(null
    undefined);
    console.log(”"null);
    console.log(0
    undefined);

全等操作符 ===

全等操作符有时候也叫严格相等
判断原则

  1. 符号两边的数据类型一定要相同
  2. 符号两边的值一定要相等
  3. NaN不与任何值相等
    例题:
    console.log(10===10); //true

console.log(“10”===10); //false

console.log(1===true); //false

console.log(0===false); //false

console.log(null===undefined); //false

console.log(NaN===NaN); //false

console.log(null===0); //false

console.log(10===9); //false

不相等操作符

根上在的相等与全等来比较,它其实就是一个反向的操作,它使用!=!==来进行
console.log(1 != 2); //true
console.log(true != 1); //false
console.log(null != undefined); //false
console.log(0 !== false); //true

### 关系操作符

关系操作符指的是几个值之间的大小关系,它们使用大于(>)或小于(<),大于等于(>=)或小于等于(<=)来表示 ,它们返回的值一定是布尔类型

console.log(100<99);		//false			
console.log("1"<2);			//true			
console.log("1"<"2");		//true				
console.log(true<2);		//true				
console.log("blue"<"action");	//false		
console.log("aa"<"ab");			//true			
console.log("A"<"a");			//true			
console.log("我">"你");			//true				   

判断规则

  1. 如果两个数是数值,则直接比较数值大小

  2. 如果一个操作数是数值 ,另一个不是数值,则将另一个数通过Number转换成数值以后再比较

  3. 如果有个操作数是布尔值 ,则先将布尔值转换成数值 再比较

  4. 如果两个操作数都是字符串,则比较两个字串所对应的编码值(ASCII码)

    ASCII码指的是计算机通用信息编码,它将我们所有的字母都使用一个数字编码来表示 ,同时也将我们的数字使用了编码来表示

  5. 如果是中文比较,则比较unicode码【目前暂时不用考虑第5条,我们后面讲字符串对象以后就可以了】

附注ACSII码表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zaa164vc-1602507684455)(http://www.softeem.xin:8090/upload/2020/05/image-20200414105241592-d12e49233708494396688bd3a02addb2.png)]

条件操作符

条件操作符在某些编程语言里面也叫条件表达式。它是根据一个条件来赋值的 三元运算符

语法:
条件是否成立?成立的值:不成立的值;
执行的流程:
条件运算符在执行时,首先对条件表达式进行求值,
如果该值为true,则执行语句1,并返回执行结果
如果该值为false,则执行语句2,并返回执行结果
如果条件的表达式的求值结果是一个非布尔值,会将其转换为布尔值然后在运算
例题:
var a = 10;
var b = 20;
//通过这一个条件操作符,我们可以将比较大的一个值赋值给max
var max = a>b?a:b;



### 逗号运算符

使用逗号操作符可以在一条语句中执行多个操作,这个操作符最常见的使用场景就是在定义变量的时候,如下所示

```javascript
//我们以前定义变量是这么定义
var a;
var b = 10;
var c;

现在有了逗号运算符以后,可以简化成如下操作

var a,b = 10,c;

逗号运算符不会中断语句的运行,直到碰到分号才会结束 ,正是因为有了一个像这样的优点,我们在定义多个变量的时候就会使用这个逗号运算符

布尔操作符

在一门编程语言中,布尔操作符的重要性堪比相等操作符,如果没有测试两个值关系的能力,那么 诸如 if…else 和循环之类的语句就不会有用武之地了。布尔操作符一共有 3 个:非(NOT)、与(AND) 和或(OR)。

布尔操作符有时候也叫关系操作符,它主要是有三个操作符

或(OR):一直即真

与(AND):一假即假

非(NOT):非真即假,非假即真

在JS里面,我们有6个明确的false,分别是0,false,NaN,null,undefined,"",这些值在经过Boolean转换的时候会得到false,其他的值都得到true

逻辑与操作符

逻辑与操作符由两个和&&符号来表示 ,表示执行一个与的操作。这个操作符的结果 不一定是布尔类型

逻辑与执行的是一个一假即假的操作

var a  = true && false && true;			//false

在上面的操作的里面,我们所有的操作都是布尔类型的值在进行操作,但是在日常工作当中,我们有时候操作的时候并非是布尔类型的值

console.log(true&&false);		//false	
console.log(true&&123);			//123	
console.log(false&&123);		//false	
console.log(true&&"");			//""	
console.log(true&&""&&123);		//""	
console.log(NaN&&false);		//NaN	
console.log(NaN&&null);			//NaN	
console.log(null&&"abc");		//null	
console.log(123&&"abc");		//"abc"	
console.log(0&&123);		    //0		

判断原则

  1. 与:一假即假
  2. 明确的false有哪些,如果不是布尔类型,就用Boolean()去转
  3. 短路原则:当已经能够得到表达式的结果的时候,我们就不用再进行后面的运算了
逻辑或操作符

逻辑或操作符由两个竖线||来构成,执行一真即真的操作,它的运算结果 不一定是布尔类型
逻辑或的操作根逻辑与的操作差不多,也可以对非布尔类型的数据进行操作

console.log(true||123||false);		//true		
console.log(false||123||false);		//123		
console.log(666||true||"hello");	//666		
console.log(NaN||false||null);		//null		
console.log(null||"world");			//"world"		
console.log(false||NaN);			//NaN		

**判断原则 **

  1. 或:一真即真
  2. 明确的false有哪些,如果不是布尔类型,则通过Boolean()去转换
  3. 短路原则:如果表达式已经能够得到结果 ,我们就不再进行后面的运算了
逻辑非操作符

布尔类型里面是有两个操作符的,即truefalse,逻辑非操作符的结果一定是一个布尔类型

采用!来表示,可以应用于JS中的任何值,无论你之前是什么类型的值,只要进行了逻辑非的操作得到的结果一定是一个布尔类型

编辑非操作符如果操作的并非是一个布尔类型的值,则会先将这个值进行Boolean转换,然后再进行逻辑非的操作

console.log(!false);		//true
console.log(!123);			//false
console.log(!NaN);			//true
console.log(!undefined);	//true
console.log(!null);			//true
console.log(!"");			//true
console.log(!0);			//true
console.log(!"hello");		//false

逻辑非操作符的本质重点就在Boolean模拟数据转换

📚 小技巧:有些时候使用两个逻辑非操作可以模拟Boolean类型的数据转换行为

console.log(Boolean(0));		
console.log(!!0);				

在执行与,或,非的逻辑操作的时候,一定要根据我们的判断原则来进行

判断原则

  1. 一真即真,一假即假,非真即假,非假即真
  2. 有哪些明确的false,如果不是布尔类型,则通过Boolean()去转换
  3. 短路原则:如果表达式已经能够得到结果 ,我们就不再进行后面的运算了
  4. 先取“非”,再来“与”,最后“或"

*补充:

JS中只有六个明确的false值:0 ,“ ”,null ,undefine ,NaN,false
除此之外都为true

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值