js运算符
1.数字的加法运算
数字+数字=数字运算;
例:
console.log( 1 + 1 ); //结果为2;
特殊运算:
console.log(0.1+0.2); //结果为0.333333333334;js存储数据是IEE47->双精度浮点数
计算准确结果的方式:
console.log((0.1 * 10+0.2 * 10)/10); //碰到浮点数的方法:先将小数转为整数,再进行还原操作;
其他数据之间的运算:
- NaN和谁运算都是NaN
- Infinity 的运算符合数学计算规则;
- Infinity+(-Infinity) 计算结果为NaN,超出了最大的数值范围;
2.字符串的加法运算
‘字符串’+其他数据类型=字符串;
字符串+字符串:
例:
var str1='abc';
var str2='456';
console.log(str1+str2); //结果为'123456'实现字符串拼接;
console.log(str1 ,str2);//运算得出两个结果'123 456';
数字+字符串:
例:
console.log( 1 +'2'); //计算结果是一个字符串,任何数据类型和字符串进行加法运算都会转为字符串;
对象+字符串 :
console.log( {} + '1'); //结果是[object object]1;
所有的对象都会先转化为[object object];字符串,这个过程中编译系统会进行隐式类型转化用.toString
数组+字符串:
同样是把数组转为字符串,用的还是隐式类型转化。
undefined +字符串和null+字符串:
都是先用String()将他们转化为字符串再进行拼接;
3.undefined&null加法运算:
undefined ,Null在进行加法运算的时是被动的,如果是与数字进行加法运算会有Number()隐式类型转化转为数字;
若是与字符串进行加法运算,则转为字符串;
console.log(undefined+null); //结果为NaN;
console.log(null+1); //结果是1,null会自动转换为零
console.log(undefined+1) //结果是NaN;
4.object&Array 加法运算:
object&Array 在运行加法的时候会用 .toString转为字符串;
console.log({age:5}+5); //结果是一个[object,object]5;
console.log([]+1); //字符串做加法,会进行解构
console.log(undefined+[]); //结果是一个字符串undefined;
5.数字的减法:
正常数字-正常数字=数学运算;
console.log(2-3); //结果为-1;
浮点数-浮点数,和加法一样需要先转为整数;
Infinity和数字的运算都是Infinity; NaN和任何数据的运算都是NaN;
所有数据类型在进行减法运算的时候都会被转为数字:
console.log('123'-1); //结果为122;
console.log('123.1'-1); //结果为122.1
console.log(undefined-1); //结果为NaN;
console.log(null-1); //结果为-1;null会被转换为数字零
6.object &Array的减法
console.log({}-100); //结果都为NaN;
console.log([]-100); //结果为-100;
console.log(['1']-1); //结果为0,数组中有多个元素时,减法结果为NaN;
7.乘法 * 和除法 /
用这两种运算符进行运算时所有的数据都会转化为数字;
数字和数字=数字运算;
除法特殊情况:
console.log(Infinty / Infinty); //结果为NaN;
console.log( 2 / 0); //结果为Infinity;
console.log( -2 / 0 ); //结果为-Infinity;
console.log(1/3); //结果为十七位的小数;
与Infinity的计算结果为NaN;
8.%求模运算->求余数
所有的数据类型都要转为数字;
9.++ 递增 &–递减
递增:
++操作符会把后面的数据类型转为数字然后再+1;
++num; 前置;
num++后置;
前置和后置的区别:
var num_a=123;
var result=++num_a+1;
console.log(num_a); //结果为124;
console.log(result); //运算结果为125;
var num_a=123;
var result =num_a++ +1;
console.log(num_a); //结果为124;
console.log(result); //结果为124;
递增递减操作不在运算中时结果是一样的;
使用递增或递减的符时只能用作变量;
递减:和递增操作符的使用规则类似;
10.Boolean 值中的操作符及运算
||或 && 与 ! 非 在用这些符号的时候会将操作符两边的数据利用隐式函数Boolean转为布尔值。
- 0 NaN undefined null false “”用Boolean转化为布尔值时是false;
- 除了以上六位。用Boolean转为布尔值时都是true;
||或:
从左往右 先把左边的数据转为布尔值,如果为true停止,如果为false继续找;
直到最后找到true停止,则寻找结果为true的这个值。
若到最后没找到true,则结果就是所有中的最后一个值;
&&与
从左往右 先把左边的数据转化为布尔值,如果为false,则结果是布尔值为false的值。
如果为true继续下一个;
!非
把boolean值为true的值转为false,结果为false;
把false转为utrue,结果为true;
11.关系操作符
小于(<)、大于(>)、小于等于(<=)、和大于等于(>=)这几个关系操作符用于对两个值进行比较,这几个操作符都返回布尔值。
var result1=5>3; //true
var result2=5<3; //false
多个数据间进行比较操作:
- 如果两个操作数都是数值,则执行数值比较。
- 如果两个操作数都是字符串,则比较两个字符串对应的字符编码值。
- 如果一个操作数是数值,则将另一个操作数转换为一个数值,然后执行数值比较。
- 如果一个操作数是对象,则调用这个对象的 valueOf()方法,用得到的结果按照前面的规则执 行比较。如果对象没有 valueOf()方法,则调用 toString()方法,并用得到的结果根据前面 的规则执行比较。
- 如果一个操作数是布尔值,则先将其转换为数值,然后再执行比较。
- 如果一个操作数是字符串,另一个数值,若字符串开头为数值型的字符则先将之转为数值(遇到字符停止转化)再与另一个数值进行比较
var result='123a4'>1233 //结果是true
这里的话是先将字符串’123a4’转为数值123,然后再与1233进行比较的
-
任何数值和NaN比较都是false;
-
如果是开头为非数值型字符串与数字相比较时,字符会先转为NaN
var result='a'>2; //结果是false,这里会先将'a'转化为NaN
12.相等操作符
相等和不相等:
相等操作符(==),如果两个操作数相等,返回true。
而不相等操作符由叹号和等号(!=)表示,如果两个操作数不相等,则返回true;
这两个操作符都会先转换操作数(强制转型),然后再比较他们的相等性;
- 如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值——false 转换为 0,而 true 转换为 1;
- 如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前先将字符串转换为数值;
- 如果一个操作数是对象,另一个操作数不是,则调用对象的 valueOf()方法,用得到的基本类 型值按照前面的规则进行比较;
- null 和 undefined 是相等的。
- 如果有一个操作数是 NaN,则相等操作符返回 false,而不相等操作符返回 true。重要提示: 即使两个操作数都是 NaN,相等操作符也返回 false;因为按照规则,NaN 不等于 NaN。
- 如果两个操作数都是对象,则比较它们是不是同一个对象。如果两个操作数都指向同一个对象, 则相等操作符返回 true;否则,返回 false。
全等和不全等:
全等操作符由3歌等于号(===)表示,它只在两个操作数未经转换就相等的情况下返回true。
var result1={'55'===55}; //false,因为不同的数据类型不相等
不全等操作符由一个叹号后跟两个等于号(!==),表示。
13.条件操作符
var max=(num1>num2)? num1:num2; //max中会保留一个最大值,如果为真,就将num1赋给max,为假则将num2赋给max;
14.赋值操作符
简单的赋值操作符由等于号(=)表示,起作用就是把右侧的值赋给左侧的变量
var num=10; //将数值10赋给num变量
符合赋值:
var num+=10; //其相当于num=num+10;
其他的复合算数操作符
*=、/=、%=、+=、-=、(左移)<<=、有符号右移(>>=)、无符号右移(>>>=);
15.逗号操作符
使用逗号操作符可以在一条语句中执行多个操作,且可以声明多个变量
var num1=1,num2=2,num3=3;
还可以用于赋值。只有最后一项有效;
var num=(5,1,4,8,0); //num的值为0;