JavaScript运算符
算术运算符
- +运算符
-
数学上的相加功能
-
拼接字符串
-
字符串和任何数据相加都会变成字符串
var num = 1 + 2 + ‘3’;
console.log(num); //33
算术运算符的优先级是从左到右的。
-
–运算符
- 数学上的相减功能
-
*运算符
- 数学上的相乘功能
-
/ 运算符
- 数学上的相除功能
-
% 运算符
- 数学上的取余功能
-
= 运算符
- 赋值运算符,优先级最低
-
== 运算符
- 比较运算符中的等于,不过两个等号的等于属于不严格等于,严格等于是“===”三个等号。
-
() 运算符
- 和数学上一样,加括号的部分优先级最高
var num = 1 + ‘2’ + (1 + 1);
console.log(num); // 122
-
++ 运算符
- 自加一运算,当写在变量前面的时候是先加1再执行运算,写在变量后面的时候是先运算再加1。
var num = 1;
console.log(num++); // 1
console.log(num); //2
console.log(++num); // 3
相类似的运算还有 — ,用法和 ++ 一样,不过是减法操作。
- += 运算符 让变量加多少
var num = num + 10;
var num += 10;
这两种操作是一样的效果,第二种是第一种的简写形式。
相同的还有 -=、/=、*-、%= 等等
var num = 3;
console.log(num %= 4); //3
- 比较运算符
比较运算符有 > 、< 、>= 、<= 、!= 、== 不严格等于、===严格等于
这里介绍一下不严格等于和严格等于的区别
当我们比较两个数据的时候,是先转化成同一个类型的数据之后再进行比较的。不严格等于就是说这两个数据进行了转化之后,他们的值相同,则整两个数据相等。而严格等于则是两个数据不进行数据转化也相等。
“2” === 2 // false
“2” == 2 //true
同时,NaN不等于任何数据,包括它本身,但是undefined就等于它本身。
NaN == NaN // false
undefined == undefined // true
var demo = !!“abc”; // true
这里的demo要进行取反运算,先进行了类型转换为布尔值true,两次取反之后依然是true,这个可以用来作为数据转换成布尔值。
- 逻辑运算符
逻辑运算符主要是 && 和 || —— 与和或
var demo = 1 < 2 && 3; // 3
&&的作用是只有是true的时候,才会继续往后执行,一旦第一个表达式就错了,后面的第二个表达式根本不执行。如果表达式的返回结果都是true的话,那么这里&&的返回结果是最后一个正确的表达式的结果。样例中的demo是3。
||的作用是只要有一个表达式是true的,那么就结束,后面的就不走了,并且返回的结果是这个正确的表达式的结果,如果都是false的表达式的话,那么返回结果就是false。
var demo = 2 < 1 || (1 == 1); // true
一般来说,&&有当做短路语句的作用,因为运算符的运算特点,只有第一个条件成立的时候,才会运行第二个表达式,所以我们可以把简单的if语句用&&来表现出来。
if(flag) {console.log(‘hello’)};
flag && console.log(‘hello’);
这两个语句是同样的含义。
一般来说,||有当做赋初值的作用,有时候我们希望函数参数有一个初始值,再不使用ECMA6的语法的情况下,最好的做法就是利用或语句。
function demo (example) {
var example = example || 100;
}
当我们调用demo这个函数并且正确传值的时候,函数内部的变量example就是我们传的值,但是如果由于我们疏忽忘记传值的话,那么里面的example就是我们的默认值100。
不过这里也有一种缺点,当我们传的参数是一个布尔值的时候,并且传的是false,那么||语句的特点就会忽略掉我们传递的这个参数值而去赋成默认的初始值了,所以为了解决这个弊端,我们就需要利用es6的一些知识了。
- 默认为false的值
数据中所有的值都可以被转换成true或false,但是true的值实在太多了,因此我们只需要记住false的值,其他的都是true。
默认为false:undefined、null、””、NaN、0、false。