JavaScript高级程序设计:基本概念--操作符
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript高级程序设计:基本概念--操作符相关的知识,希望对你有一定的参考价值。
操作符包括:算术操作符、位操作符、关系操作符和相等操作符。
一元操作符
1、只能操作一个值得操作符,即递增和递减操作符;
2、递增(++)和递减(--)操作符包括:前置型和后置型。前置型位于要操作的变量之前;后置型位于要操作的变量之后。
3、执行前置递增和递减操作时,变量的值都是在语句被求值以前改变的;执行后置递增递减操作时,是在包含它们的语句执行后才执行的。eg:
var age=22; //前置递减 var ageOther=--age+2; //返回23(先执行递减,再执行语句) //后置递减 var ageAf=age-- + 2; //返回24 (先执行语句,再执行递减)
4、递增和递减操作同样可以适用于字符串、布尔和对象,不过要先转换成数值,然后再进行其操作。
var s1=‘1‘; var s2=‘z‘; var f=‘1.1‘; var b=‘true‘; var o={ valueOf:function(){ return -1; } } //执行递增递减操作 ++s1; //2 ++s2; //NaN(不包含数字的,转换数值返回NaN) --f; //0.10000000000000009; (浮点类型产生的误差) b++; //2 o++;//0(对象,调用valueOf()方法,然后转换为数值进行操作)
5、一元加减操作符:将加号(减号)放到数值前面,对数值不会产生任何影响【同样适用于字符串、布尔和对象,规则同理递增和递减操作】。eg:
var num=90; num=+num; //90 //但是如果是减号,会变成相反数 var num2=33; num2=-num2; //-33
6、位操作符:ECMAScript中所有数值都以IEEE-754 64位格式存储,但位操作符并不是直接操作64位的值。而是先将64位的值转换为32位,执行操作,最后再转回64位。
7、位操作符运算包括:按位非(NOT ~)、按位与(&)【计算规则:同为1才得1】、按位或(|)【计算规则:有1就得1】、按位异或(^)【计算规则:不同值才得1】。
8、布尔操作符:逻辑非(not) 逻辑与(and) 逻辑或(or)3个操作。
9、逻辑非(!)可以用于任何数据类型,且会返回一个布尔值。逻辑非操作符遵循的规则:
1)null、undefined、NaN、空字符串、0都会返回true;
2)对于非空字符串、对象、非0数值(包括infinity无穷)返回false
总结:可以通过逻辑非,判断一个变量是否存在。
10:逻辑与(&&):有两个操作数。例如:var rs=true && false; //false
11、逻辑与操作符适用于任何数据类型,其遵循的规则:
1)若第一个操作数是对象,则返回第二个操作数;
2)若第二操作数是对象,则只有在第一个操作符是true的情况下才会返回该对象;
3)若两个操作符都是对象,则返回第二个操作数;
4)若其中有一个操作数是null、undefined、NaN,则返回这些值。
12、逻辑与(&&)操作:短路操作,即第一个操作数能够决定结果,那么就不会再对第二个操作数求值了。若第一个操作数的值是false,那么第二个操作将不再执行。
eg:
var f=true; var rs=(f && s); //catch 到错误。s为定义变量 console.log(rs); //这一语句不会执行 var f=false; var rs=(f && s); console.log(rs); //返回false,s将不再执行
13、逻辑或操作符与逻辑与相似,返回值不一定是布尔值,遵循的规则:
1)若第一个操作数是对象,则返回第一个操作数;
2)若两个操作数都是对象,则返回第一个操作数;
3)若第一个操作数求值结果是false,则返回第二个操作数
4)若其中有一个操作数是null、undefined、NaN,则返回这些值。
14、乘性操作符:乘法、除法、求模(余数)。对于非数值的操作符,会用Number()进行转换,即非数值字符串==》0,布尔值==》0和1。
15、乘性操作符特殊操作遵循的规则:
1)如果乘积超过ECMASpcript的范围,则会返回Infinity或者-Infinity;
2)若一个操作数是NaN,则返回NaN;
3)Infinity与0相乘,则返回NaN;
4)Infinity与非0数值相乘,返回Infinity或者-infinity,符号取决于非0数值;
5)Infinity与Infinity相乘,则返回Infinity。
6)数值与一个非数值相乘,则先调用Number()进行转换,然后按照以上规则进行操作。
16、除法类似于乘法,不同的规则:
1)Infinity除Infinity,返回NaN;
2)非0数值除以0,则返回Infinity或者-Infinity,符号取决于非0数值的符号;
3)非0数值除以Infinity,则返回Infinity或者-Infinity,符号取决于非0数值的符号;
17、求模(余数 %): var rs=26 % 5;
18、求模的处理特殊的值,遵循的规则:
1)无穷大Infinity除以有限大的数值,返回NaN;
2)有限大的数值除以0,返回NaN;
3)Infinity除以Infinity,返回NaN;
4)0除以非0的数值(包括无穷大),返回0;
5)有限大的数值除以无穷大,返回有限大数值;eg:
var rs=10 % -Infinity; console.log(rs); //10 var rs=10 % Infinity; console.log(rs); //10
19、加性操作符处理特殊的值:
1)Infinity 加 -Infinity,返回NaN;
2)+0加-0,返回+0;
3)若一个数值和一个字符串相加,得到的是字符串的拼接;eg:
//两个字符串,拼接 var nus1=‘1‘; var nus2=‘2‘; console.log(nus1+nus2); //‘12‘ //一个数值 +一个字符串 var num=1; var s=‘2‘; console.log(num+s); //‘12‘
20、减性操作符处理特殊的值:
1)存在操作符NaN,则返回NaN;
2)Infinity-Infinity 返回NaN;
3)-Infinity减去-Infinity,返回NaN;
4)Infinity减去-Infinity,返回Infinity;
5)-infinity减去infinity,返回-infinity;
6)非数值型的减,先调用Number()转换,然后再执行减操作;eg:
var rs1=5-true; //4(true被转换为了1) var rs2=NaN-1; //NaN(有NaN存在) var rs3=5-3; //2 var rs4=5-‘‘; //5 (‘‘ 转换后为0) var rs5=5-null; //5 (null 转换后为0) var rs6=5-‘2‘; //3
21、关系操作符:当关系操作符的操作数是非数值时,也要进行数据转换或完成某些奇怪的操作。eg:
1) 若两个操作数是字符串时,则比较两个字符串对应的字符编码;【两个数值字符串比较也是如此】eg:
var rs="Bird"<‘apple‘; //true (原因:字符‘B’的编码是66,字符‘a’的编码是97,所以是小于) var rs2=‘Bird‘.toLowerCase()<‘apple‘.toLowerCase(); //false (原因:当都转换为小写时候,字符‘b’的编码是98,字符‘a’的编码是97,所以是大于)
//两个数值字符串比较
var rs3=‘23‘<‘3‘; //true(字符‘2‘确实小于‘3’)
//数值与字符串
var rs4=‘23‘<3; //false(字符‘23’会先转换为数值23,再进行比较,所以是大于)
2)若数值与一个非数值进行比较时,都应该先转换成数值,再进行比较。
3)任何操作数与NaN比较,都将返回false。
22、相等操作符:有两种情况:相等(==)和不相等(!=):先转换成同类型在比较;全等(===)和全不等(!==):不转换直接比较【数据类型也会进行比较】。
23、相等操作遵循的规则:
1)null和undefined是相等的。
2)若两个操作数都是对象,则比较两个对象是不是同一个对象。若指向同一个对象则返回true,否则false。
3)任何操作数与NaN都不相等。 eg:
null==undefined; //true
NaN !=NaN; //true NaN==‘NaN‘; //false
NaN==NaN; //false ‘5‘==5; //true
true==1; //true false==0; //true false==1; //false
24、全等和全不等:数据类型也要相等;eg:
var rs=(‘55‘===55); //false(数据类型不同:字符串 数值) var rs2=(55===55); //true var rs3=(null===undefined); //false(null和undefined数据类型不同)
25、条件操作符:语法:var tt=boolean_expression ? true_value : false_value; eg:
var max=(num1 >num2)?num1 : num2; //获得两个值中最大值
26、赋值操作符(=):在等号前面加上乘性操作符、加性操作符,就可以完成复合操作符。eg:
var num=10; num=num+10; //可以简写成复合形式: var num=10; num+=10;
27、逗号操作符:一条语句中可以执行多个操作,主要通过逗号来完成的。
1)如声明多个变量:eg: var num=1, s=‘3‘,flag=false;
2)可以用来赋值。eg: var num=(1,2,5,8,9,6,0); //num的值为0(因为0是表达式最后一个值,所以num的值就是0)
以上是关于JavaScript高级程序设计:基本概念--操作符的主要内容,如果未能解决你的问题,请参考以下文章