概述
JavaScript运算符
ECMA-262 描述了一组用于操作数据值的操作符,包括算术操作符(如加号和减号)、位操作符【现在暂进不考虑】、 关系操作符和相等操作符。这些操作符可以运用于我们的很多数据类型,它不像我们其它编程语言,操作符只对某些数据支持
一元操作符
只能操作一个值的操作符我们叫一元操作符。
一元加减操作符在我们的JS里面最主要的作用就是类型转换。
例题:
var a = “01”;
a = -a;
console.log(a);
运行结果:
一元加减操作符其实就是对当前的变量调用了Number
的方法来进行转换;
一元减操作符就是将当前变量通过Number
方法转换以后再乘以-1
,它的结果是一个负数;
总结 :一元操作符最终所得到的结果一定是一个数字类型
递增递减操作符
在原有的数值上面进行相加或相减。
如果不是Number
类型的数据执行了递加的操作,它会先通过Number()
这个方法去转换一次,然后再操作。
递增操作里面:
- ++在后面是先使用这个变量,再把这个变量+1
- ++在前面是先把自己+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 */
加法操作符 +
操作原则
- 如果两个数都数字,则直接相加
- 如果其中有一个是字符串,另一个是字符串,结果是一个拼接型的字符串
- 如果都是字符串,则直接拼接
- NaN是一个特殊的数字类型,除了与字符串相加外,跟其它任何值相加都是NaN
- 数字与布尔类型相加,undefined或null相加,调用Number方法去转换一次,然后再相加
- 如果相加的两个值不是数字类型,也不是字符串类型,则整体通过
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 */
减法操作符 -
- 减法操作符得到的结果一定是一个
Number
类型 - NaN与任何值相减都是NaN
- 如果执行减法的不是数字,则通过
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
乘法操作符 *
操作原则
- 乘法操作符得到的结果一定是一个
Number
类型 - NaN与任何值相乘都是NaN
- 如果执行乘法的不是数字,则通过
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
除法操作符 /
操作原则
- 除法操作符得到的结果一定是
Number
类型 - NAN与任何数相除都是NaN
- 如果执行除法的不是数字,则通过
Number
去转换一次 - 如果被除数为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
取余操作符 %
操作原则
- 取余操作符得到的结果一定是
Number
类型 - 如果在操作的时候有NaN,则结果就是NaN
- 如果执行取余的不是数字,则通过
Number
去转换一次 - 如果除数为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()
这三个方法进行类型转换
全等,通过符号===
来表示
判断原则
- null与undefined是相等的,除此之外与任何值都不相等
- NaN不与任何值相等,包括它自身
- 如果一个操作数是字符串,另一个操作数是数值,在比较之前先将字符串转为数值
- 布尔类型转换成数字,true就为1,false就为0
- 在比较相等之前,不能将
null
与undefined
转换成任何类型(它们如果参于了比较,不能做类型转换)
例题:
console.log(12);
console.log(11);
console.log(1true);
console.log(0false);
console.log(“0”==false);
//-------------------------
console.log(“10"10);
console.log(""0);
console.log(NaN0);
console.log(nullundefined);
console.log(”"null);
console.log(0undefined);
全等操作符 ===
全等操作符有时候也叫严格相等
判断原则
- 符号两边的数据类型一定要相同
- 符号两边的值一定要相等
- 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
判断规则
-
如果两个数是数值,则直接比较数值大小
-
如果一个操作数是数值 ,另一个不是数值,则将另一个数通过
Number
转换成数值以后再比较 -
如果有个操作数是布尔值 ,则先将布尔值转换成数值 再比较
-
如果两个操作数都是字符串,则比较两个字串所对应的编码值(ASCII码)
ASCII码指的是计算机通用信息编码,它将我们所有的字母都使用一个数字编码来表示 ,同时也将我们的数字使用了编码来表示
-
如果是中文比较,则比较
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
判断原则
- 与:一假即假
- 明确的false有哪些,如果不是布尔类型,就用Boolean()去转
- 短路原则:当已经能够得到表达式的结果的时候,我们就不用再进行后面的运算了
逻辑或操作符
逻辑或操作符由两个竖线||
来构成,执行一真即真的操作,它的运算结果 不一定是布尔类型
逻辑或的操作根逻辑与的操作差不多,也可以对非布尔类型的数据进行操作
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
**判断原则 **
- 或:一真即真
- 明确的false有哪些,如果不是布尔类型,则通过
Boolean()
去转换 - 短路原则:如果表达式已经能够得到结果 ,我们就不再进行后面的运算了
逻辑非操作符
布尔类型里面是有两个操作符的,即true
与false
,逻辑非操作符的结果一定是一个布尔类型
采用!
来表示,可以应用于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);
在执行与,或,非
的逻辑操作的时候,一定要根据我们的判断原则来进行
判断原则
- 一真即真,一假即假,非真即假,非假即真
- 有哪些明确的false,如果不是布尔类型,则通过
Boolean()
去转换 - 短路原则:如果表达式已经能够得到结果 ,我们就不再进行后面的运算了
- 先取“非”,再来“与”,最后“或"
*补充:
JS中只有六个明确的false值:0 ,“ ”,null ,undefine ,NaN,false
除此之外都为true
最后
以上就是自觉钢笔为你收集整理的我理解的JavaScript运算符的全部内容,希望文章能够帮你解决我理解的JavaScript运算符所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复