表达式是一个产生结果值的式子。JS中的表达式通常由常量、变量和运算符组成。表达式能够做为参数传递给函数,或者将表达式结果赋予变量保存起来。表达式的结果值有多种类型,如:字符串类型、数值类型、布尔类型等。所以表达式有逻辑表达式、数值表达式、布尔表达式之分。
操做数指表达式中的常量或变量,是表达式的一个重要组成部分。如:
(A+B+C)/D
其中ABCD就是操做数,“+”和“/”则是运算符。操做数的数据类型受表达式的类型和运算符所支持的数据类型决定。编程
运算符是指程序设计语言中有运算意义的符号。在JS中,运算符有单目和多目之分,单目运算符带一个操做数,多目运算符带多个操做数。运算符包括:算术运算符、关系运算符、字符串运算符、逻辑运算符和位运算符。数组
算数运算符是定义数学运算的符号,一般在数学表达式中使用,实现数据类型操做数间的数学计算。主要包括:加法(+
)、减法(-
)、乘法(*
)、除法(/
)、取模(%
)、正负号(+/-
)、递增(++
)、递减(--
)。
其中加减乘除取模为双目运算符,其他几个为单目运算符。函数
关系运算符是比较两个操做数大、小于或相等的运算符。返回一个布尔值,操做数的类型能够任意。包括相等(==
)、等同(===
)、不等(!=
)、不等同(!==
)、小于(<
)、小于或等于(<=
)、大于(>
)、大于等于(>=
)以及instanceof这几种。测试
==
判断两个操做数是否相等,属于双目运算符若是相等返回true,不然返回false,属于双目运算符。两个操做数的数据类型能够任意,由于JS属于弱类型的 语言,所以能够比较两种不一样类型的数据。运行时,==
会把两端的操做数转换为同一种数据类型后再做比较。以下:ui
var a="10"; var b=10; if( a == b ) { alert ( "a等于b,==使两端的操做数发生了类型转换" ) }
注意:==
并不是严格意义上的相等,只要类型转换后的数据仍然相等,就返回true。this
===
等同运算符是严格意义上的相等,属于双目运算符,两个值和它们的类型彻底一致时才返回true,两端的操做室可使变量,也能够是常量,数据类型不限。上面示例若是换成用等同运算符===
作比较,结果则返回false,由于a和b的数据类型并不同。加密
!=
不相等运算符属于双目运算符,返回一个布尔值,表示两个操做数是否相等。两个操做数类型任意,能够是变量,也能够是常量。设计
!==
不等同运算符属于双目运算符,效果与等同运算符正好相反,运算符两端的操做数能够是变量或常量,数据类型不限。
小于运算符,小于等于运算符,大于运算符,大于等于运算符用法与数学意义上类似,都是双目运算符。指针
in运算符用来检查对象中是否有某特定属性,一般,在数组对象中存在一种称为元素索引的属性集合,该集合的每一个元素都是一个非负整型值,所以能够经过in运算符取得数组索引集合。以下:code
var fruit = ["苹果","5","梨","3.5","葡萄","7","香蕉","2"]; for( index in fruit ) { if ( index%2==0 ) { document.write( fruit[index]+"的单价为:" ) } else { document.write( fruit[index]+"元"+"<br>" ) } }
intanceof运算符返回一个布尔值,代表某对象是不是某个类的实例。获得一个对象时,有时须要得知其属于哪一个类,肯定对象的身份,使用语法以下:
result = Obj instanceof Class
若是Obj是类Class的对象,则result的值为true,不然为false。
当要肯定某个对象的类型是,能够用typeof运算符。
字符串也是一种数据,一样也存在相应的计算,字符串运算符主要包括+
、>
、<
、>=
、<=
这几种。
逻辑运算符包括逻辑与(&&
)、逻辑或(||
)、逻辑非(!
)等。
逻辑与(&&
)运算符属于双目运算符,将第一个操做数与第二个操做数相与,返回一个布尔值。示例:
<body> 单击下载该资源 <button onclick="download()">下载</button> <script> var register = true, level = 3, balance = 25; function download() { if ( register && (level >= 2) && (balance >= 30) ) { //要想下载资源,必须同时知足以上三个条件,不然没法下载 alert ("您能够下载该资源!") }else{ alert ("没法下载!") } } </script> </body>
逻辑或运算符(||
)属于双目运算符,对两个操做数进行或运算并返回一个布尔值,返回值代表,两个操做数中是否至少有一个值为true。示例:
var intrSelf=prompt("爱好:"); document.write("爱好:"+(intrSelf||"什么都没留下...")); //其中intrSelf和"什么都没留下..."选其一便可。
逻辑非运算符(!
)属于单目运算符,对操做数的逻辑值取反,数据类型不限。和逻辑非运算符结合后的数据类型皆被当作布尔型。
位运算符是对变量的二进制间进行逻辑运算,于是取得一个新的值。包括位与(&
)、位或(|
)、位异或(^
)、位非(~
)和移位运算符(>>
,<<
)。
位与运算符&
属于双目运算符,两个操做数的对应二进制位相与,对应两个位都为1结果之中对应位也为1,不然为0,结果值的长度和两个操做数中位数多者相同,一般用于测试某个操做数中的某位是否为1。示例:
某地下通道有8条行车线,每5分钟只能随机容许其中数条通车,用红绿灯控制车道的通停,1表示绿灯,0表示红灯,测试一、三、五、7车道是否开通:
var curState = 108; //全部车道当前状态,转为二进制后与下面的数相与 if( curState & 85 == 85 ){ //若是1357车道为开通,用二进制表示为10101,转为十进制为85 alert( "一、三、五、7车道为开通状态" ) }else{ alert( "一、三、五、7车道为关闭状态" ) }
位或运算符|
属于双目运算符,两个操做数相对应的位若是都不为0,则结果值的相应位为1,不然为0。例如2的二进制码为10,3的二进制码为11,2和3做位或运算得3。
位异或运算符^
属于双目运算符,当两个操做数对应位不相同时,结果值的相应位即为1,不然为0。示例:
用异或运算实现信息加密解密。为了避免使密码“123456”以明文的形式存放,先将其加密,密钥为“666666”,输出加密后和解密后的密码:
var psw = 123456; var key = 666666; var codePsw = psw ^ key; alert ( "加密后的密码为:"+codePsw ); alert ( "解密后的密码为:"+ (codePsw ^ key) )
位非运算符~
属于单目运算符,实现对操做数按位取反运算。
对于字符串数据,按位取反后值为-1,对布尔值true和false取反分别得-2和-1,对数值数据+N得 -(N+1),-(N)得N-1。测试:
for ( var i = 0, msg1 = "正数取反:"; i <= 10; i++ ) { msg1 += i + " => "+ ( ~i )+"; "; } console.log(msg1); for ( var i = -10, msg2 = "负数取反:"; i < 0 ; i++ ) { msg2 += i + " => "+ ( ~i )+"; "; } console.log(msg2); var a=true, b=false; console.log( "布尔值取反:" + a + " => " + (~a) + ", " + b + " => " + (~b) ); var name="Tom"; console.log( "字符串取反:" + name + " => " + (~name) );
左移位运算符<<
实现总体向左移动低位补0的功能,属于双目运算。如50 << 3
表示将50的二进制位序列总体向左移动3位,代码以下:
var num = 50; num = num << 3; console.log( num );//400
注:向左移n位至关于原数乘以2的n次方。
右移运算符包括带符号位右移和不带符号位右移,不一样之处是高位的处理方式不一样。当移动的是有符号数,左边空出的位用数的符号位填充,向右移动超出的位将被丢弃。
除了前面讲到的算术运算符逻辑运算符等,还有一些其余的运算符,如条件运算符、new运算符、void运算符、typeof运算符、点运算符、数组存取运算符、delete运算符、逗号运算符、this运算符等。
条件运算符?:
属于三目运算符,能够根据条件在两个语句间选择一个来执行。语法以下:
条件表达式 ? 语句1 : 语句2
参数说明:
语句2,若是条件表达式返回false,则执行。
建立对象的一种方式是直接使用new。
前面的表达式均可以返回一个值,然而有些地方却不须要返回值。此时能够用void运算符来避免表达式返回值。
JS中每个数据都属于一种数据类型,使用typeof运算符,便可得到数据的类型名。
又称为点号运算符,使用符号“.”表示。做用是读取对象的属性,或者保存值到对象的属性,或者调用对象的方法,使用语法以下:
对象名.属性名或方法名
数组以元素为单位保存数据,读取其中的数据时须要读出元素。JS用[]
运算符用于存取数组元素,方括号中是要存取的元素的下标。语法以下:
数组名[下标]
var student = new Object(); student.name = "Tom"; student.age = "15"; student.sex = "male"; console.log( student ); delete student.sex; console.log( student );
函数调用运算符call
,做用于Function对象。调用对象的一个方法,并以另外一个对象做替换为当前对象,以改变this指针的方向。
function stuInfo(){ document.write( this.name + " " + this.age + "<br>" ) }; function Student(_name,_age){ this.name = _name; this.age = _age; } var stu1 = new Student("Tom",20); var stu2 = new Student("Lily",21); stuInfo.call(stu1); stuInfo.call(stu2);
this严格地说是个关键字,也能够理解为运算符。面向对象编程中要引用当前对象,this能够返回当前对象的引用。用法以下:
this.属性名或方法名