这里写代码片
一、算数运算符
- "+"运算符:数学上的相加功能
除此之外"+"运算符也能拼接字符串 ,字符串和任何数据相加都会变成字符串。
例如:
var a = 1 + "abc";
console.log(a);//字符串的1abc
- "-"运算符:数学上的相减功能
- “*” 运算符: 数学上的相乘功能
- "/"运算符:数学上的相除功能
- “%” 运算符:数学上的取余功能
- "++"运算符:自增运算符,当写在变量前的时候先对变量执行加1在执行本条语句,写在变量后面,先执行本条语句,在对变量进行加1。
例如:
var a = 0;
console.log(a++);//----------返回0
console.log(a);//----------返回1
//++在后先取值,执行完本条语句后,在进行+1操作,
//所以第一次返回0,第二次返回1
var a = 0;
console.log(++a);//----------返回1
console.log(a);//----------返回1
/* ++在前先对变量自身的值,进行+1操作,在执行本条语句,
所以第一次就会返回1,第二次返回0
*/
var a = 1;
var b = 2;
console.log(a++ + ++a + b++);//---------返回6
//console.log(a,b);//----------返回3,3
console.log(++a + a++ + ++b);//---------返回12
//解析:对于第一条输出:相当于1 + 3 + 2 = 6
/*首先是a++,先取a初值为1,然后给a+1赋给自身,之后a就变成了2,
在执行++a,++在前,先自加1在赋给a(因为前面的操作,a已经为2,
在加1,a=3),最后b++,因为++在后,所以取b的初值2做运算,再给b+1。
整个运算就是1+3+2=6。a最后为3,b也为3。
*/
- "–“运算符:自减运算符,执行方式与”++"运算符相同,只是效果是减1操作。
- "+="运算符:使用自身变量先执行加法运算在赋值给自身
例如:
var a = 10;
a += 10;//相当于a = a + 10;
console.log(a);//---------返回20
二、比较运算符 - ">"运算符:数学上的大于功能
- ">="运算符:数学上的大于等于功能
- "<"运算符:数学上的小于功能
- "<="运算符:数学上的小于等于功能
- "=="运算符:比较两者的值是否相等
- "!=“运算符:与”!="效果相反
- "==="严格等于:
- "!=="严格不等于:
js是弱类型语言,变量基本都是用关键字var来声明。所以在进行运算操作时,对于不同类型的数据,js会在内部进行类型转换,通过转换统一两者的数据类型,在进行运算操作。因为这个操作是隐式的自身进行的操作,因此被称为隐式类型转换。
例如:
var num = 'abc';
num++; //结果为NaN
num2 = '123';
++num; //结果为124
/*因为要对num进行++操作,js内部会调
用Number属性,先将num转换成数字类型,再运算。
之前的各种算数运算符在执行前也都会进行类型转换,
转换为数字在进行计算*/
对于双等,如果是比较原始值类型的数据,比较的是两者的原始值是否相同,例如’123’==123,会进行隐式类型转换,将字符串隐式的转换为Number类型,在对两者的值进行比较。对于引用类型,双等比较的是引用类型的地址是否相同。
例如在控制台操作如下:
//原始数据类型
var a = '123';
var b = 123;
a == b;//返回true
var a = 0;
var b = false;
a == b;//返回fasle
//引用类型的比较
var a = {};
var b = a;//给b拿到a的引用
a==b;//返回true
//b和a都指向同一个内存地址,所以会返回true
var a = {};
var b = {};
a == b;//返回false
//a与b指向的是两个不同的内存空间,所以会返回fasle;
何为严格等于?
严格等于不会进行隐式类型转换!!不会进行隐式类型转换!!严格等于除了对两者的原始值进行比较,还要对其数据类型和地址进行比较,只有都相同时,等式才会成立。
例如:
var a = '123';
var b = 123;
a === b;//返回false;
//虽然值相同,但是数据类型不相同,一个为Number一个为String。
var a = {};
var b = {};
a === b;//返回false
//虽然值相同,但是两者是不同的对象,各自的引用地址不相同。返回false
var a = {};
var b = a;
a===b;//返回true
//两者的值相同,类型相同,指向的地址也相同,返回true
三、逻辑运算符
"&&"与运算符:
其含义是两边表达式判断均为true时,才会继续执行,一旦有一个不为true,便不会执行。
截断操作:只要前面的表达式判断为flase了,后面的根本不执行。如果都是true,那么会返回后面的正确表达式的结果
"||"或运算符:
其含义是两边只要有一个为ture,就会执行后面的,并且返回的是为true的表达式的结果,如果都是false,那就返回false,并不继续往后执行。
截断操作:只要前面的表达式为true了,后面的也根本不执行。并且返回正确表达式的结果。都是false就返回false。
"!“非运算符:
取反操作,例如”==“表示等于,”!="表示不等于。
逻辑运算符也会进行隐士类型转换,会对运算符两边的表达式隐式的调用Boolean转换为布尔值再进行判断。
会被隐式转换为false的几个值:
Boolean(0); // false
Boolean(undefined); // false
Boolean(null); // false
Boolean(''); // false
Boolean(NaN); // false
四、位运算符
"&"按位相与,是将两者的二进制数,进行按位与的操作,都为1时才取1,有0就取0。
"|"按位相或,将两者的二进制数,进行按位相或的操作,只要有1就取1。
"^"按位异或,将两者的二进制数,进行按位想异或操作,不同时取1。
五、赋值运算符
"="运算符:赋值运算符,优先级最低