1.表达式的三个重要组成部分:变量,常量,运算符 举例来演示表达式的使用:
//假设初始账户余额为1000,经过第一次支付后检测当前余额能否再次进行第二次支付,不能则发出提示信息,例如: var money = 1000; var a ; var s = prompt("请输入支付数",""); var save = money - s ; if (save >= s) alert("余额为:" + save ); else alert("余额为:" + save + "," + "不足以支付第二次!" );输入666 输出的是:余额为334,不足以支付第二次!
2.操作数 举例:(a+b-c)/d a,b,c,d是操作数,“ + ” “ - ” “ / ”是操作符
3.运算符 3.1 概念 在表达式中起运算作用的符号称为运算符,运算符分两种:
单目运算符:带单个操作数,如:A++,此时的 “ + ”为单目运算符多目运算符:带多个操作数,如:a+b-c+d,此时的 “ + ”为多目运算符3.2操作数的分类 在表达式中,变量或者常量的数据类型会沿袭到表达式中。举例:
var a = "4"; var b = 8; c = a + b ; document.write(c);输出结果为:48 这里的a为字符串类型,这里的b为数值类型,而此时c中的“ + ”就是把a和b连接起来,而不是相加,所以c的输出结果为48。
4.算术运算符 加减乘除:“ + ” “ - ” “ * ” “ / ” 取余 : “ % ” 递增递减:“ ++ ” “ – ”
5.关系运算符
“ == ” 与 “ = ” 的区别:前者表示相等,后者表示赋值 相等运算符与等同运算符的区别:相等运算符可以通过类型转换实现非严格意义上的相等,但是等同运算符就是严格意义上的相等,类型不一样就不相等。 比如: var a = " 10 "; var b = 10 ; if( a == b ) { document.write("说明相等运算符不区别数据类型"+"<br>") } if( a === b ) { document.write("说明等同运算符也不区别数据类型") } else { document.write("说明等同运算符是一定要数据类型相同的"); }显示结果为: 2.
不等运算符(!=):不是严格意义上的不等,在经过类型转换后还不相等,那就是不相等了。 不等同运算符(!==):严格意义上的不等,不经过数据类型转换 小于大于:“ < ” “ > ” 小于或等于:“ <= ” 大于或等于:“ >= ” in运算符:检查对象中是否有某种特定的属性,在我的理解中就是有种类似范围的意思。 比如 :
var ChenyuHua = new Array("花花"," Mars ", "singer" ) for(i in ChenyuHua) { document.write(ChenyuHua[i] + " "); //这里就是在ChenyuHua这个数组范围内进行遍历 }3.instanceof运算符 该运算符返回一个布尔值,表明某个对象是否是某个类。 例如: result = Obj instanceof Class 如果Obj是类Class的对象,则result的值返回为true,否则为false
6.字符串运算符 两个字符串相加就是连接,举例:
var string1 = "华晨宇"; var string2 = "牛逼!"; var string3 = string1 + string2; document.write(string3);输出:华晨宇牛逼!
7.逻辑运算符 与:&& 或:|| 非:!
8.位运算符 8.1位与运算符( & ) 两个操作数的对应二进制数相与,对应两个位都为1的时的结果值中对应位也为1,否则为0。结果值的长度和两个操作数中位数最多者相同,通常用于测试某个操作数中的某位是否为1,作为开关使用。 格式:var result = 操作数1 & 操作数2 ; 例:
//1 2 4 8 16 32 64 128 var a = 56 ; var b = 192; if((a&b)==a) document.write("啊这" + " "); else document.write("192=128+64=76,56=32+16+8=543,56不在92里面啊" + " "); if((215&85)==85) document.write("215=1+2+4+16+64+128=123578,85=1+4+16+64=1357,1357在13578里面"); else document.write("不可能是对的");输出结果为: 8.2 位或运算符( | ) 格式: var result = 操作数1 | 操作数2; 例如:
var result = 2 | 3 ; document.write(result);输出:3 2的二进制码是10,3的二进制码是11,2和3的第一位和第二位至少有一个为1,所以输出为3。
8.3位异或运算符( ^ ) 作用:当两个操作数对应位不相同时结果的相应位即为1,否则为0,应用的情形与位与、位或相同,仅存在于功能上的区别。 格式:var result = 操作数1 ^ 操作数2 ;
var result = 2 ^ 1 ; document.write(result);8.4位非运算符( ~ ) 作用:实现对操作数按位取反运算 格式:result = ~ 操作数 ; 字符串取反为-1,布尔值的true和false分别取反为-2和-1,数值数据+N取反得 -(N+1) ,-N 得 N-1。 举例:
//写一串代码,实现正负数取反,布尔值取反,字符串取反 document.write( "<li>正数取反: "+ "<br>" ); for(i=0;i<5;i++) { document.write( i + "取反为" + (~i) + " " + "<br>" ) ; } document.write( "<br>" + "<li>负数取反" + "<br>" ); for(i=-5;i<-1;i++) { document.write( i + "取反为" + (~i) + " " + "<br>" ); } document.write( "<br>" + "<li> 布尔值取反:" + "<br>" ); var a1 = true; var a2 = false; document.write( a1 + "取反为" + (~a1) + "<br>" ); document.write( a2 + "取反为" + (~a2) + "<br>" ); document.write( "<br><li>字符串取反:" + "<br>" ); var char = "ChenyuHua"; document.write( "\"" + char + "\"" + "取反为" + (~char) );显示结果如下: 8.5 左移运算符(<<) 作用:将一个数转换成二进制然后后移几位。 格式:result = 操作数1 << 操作数2 比如 50 << 3 : 50 = 2^5 + 2^4 + 2^1 转换成二进制就是110010 后移三位就是110010 000 ,转换成二进制数是400
document.write(50<<3);输出:400
8.6 右移运算符(>>) 二进制转换后最高位数:“1”是负数,“0”是正数 举例:-10>>2 10的二进制数是1010,补码为0101,之后补1,变成0110,而-10就是10110,右移两位,变成101,然后用1补齐位数,为11101,然后11101-1=11100,其反码为00011,得出来是-3.
8.7 高位补0右移运算符(>>>) 格式: result = 操作数1 >>>操作数2 举例:5>>>2 5的二进制数是101,右移两个,把01推掉,变成1,然后补齐位数,变成001,转换成十进制就是1
9. 其它运算符 9.1 条件运算符(?:) 作用:两个语句用某个条件执行其中一个。 这个是三目运算符。 格式:条件?语句1:语句2 根据表达式条件,如果条件满足执行语句1,否则就执行语句2
var time = 9 ; var judge = "现在是" + ( ((time >=6 )&&(time <= 12 ))?"早上":"不是早上" ); document.write(judge);9.2 new运算符 作用:创建对象 格式:new constructure( [ args , [ … ] ] ) ; constructure:类构造函数,用于构造对象 ; args:是传递给构造函数的参数,可选项 例如:var singer = new String ( “华晨宇牛逼” ) ; 变量singer引用了新建的string对象,然后将将“华晨宇牛逼”传给变量singer。如果删除对象,就对引用的对象的变量赋null值。
9.3 void 运算符 使用void可以避免某些表达式返回值
9.4类型检测运算符 格式:typeof(表达式) 返回6种可能的值:Number,String,Boolean,Object,Function,undefined
9.5 对象属性存取运算符( . ) 作用:读取对象属性,或者保存对象值的属性,或者调用对象的方法。 格式:对象名.属性名或方法名 类名.方法名 举例:
var ChenyuHua = "华晨宇" ; var len = ChenyuHua.length; var xing = ChenyuHua.charAt(0); document.write(ChenyuHua + "的名字长度为" + len + "," + "姓" + xing )9.6 数组存取运算符( [ ] ) 格式: 数组名[下标] 举例:
var name = new Array("lisa","xiaowang","xiaozheng","xiaoli"); for(i in name) { document.write( name[i] ); }输出: lisa,xiaowang,xiaozheng,xiaoli
9.7 delete 运算符 作用:删除对象的一个属性或者数组的一个元素 举例:
//delete运算符 //用一个对象表示一个学生,为其动态添加姓名,性别,年龄等属性 var student = new Object(); student.name = "Tom"; student.age = "18"; student.sex = "男"; document.write(student.name + " " + student.age + " " + student.sex + "<br>" ); delete student.sex; document.write(student.name + " " + student.age + " " + student.sex + "<br>" );输出是: Tom 18 男 Tom 18 undefined
9.8 逗号运算符( , ) 作用:使两边表达式从左往右执行 格式:表达式1,表达式2 例如:
var j = 0; for( i=0;i<10;i++,j++ ) { document.write((j+=i) + " " ); }输出: 0 2 5 9 14 20 27 35 44 54
9.9 函数调用运算符( call ) 作用:调用函数对象的一个方法,并以另一个对象作替换为当前对象,以改变this指针的指向。js函数和对象方法的调用通常发生于一个运行时上下文中,一般为Global对象上下文。但当前执行上下文可以更改,使用call运算符即可达到目的。 格式: 对象名.call ( [thisObj , [ arg1, [ arg2, [ argn, [ … ] ] ] ] ] ) 参数说明: 对象名:为一个有效的function对象 thisObj:是即将换为当前上下文对象的引用,可选,当省略时自动设置为Global对象 arg:传递给Function对象的参数,可选 举例:
//输出两个学生的姓名和年龄 function student(name,age) { this.name = name; this.age = age; } function studentinfo() { document.write("<li>名字:" + this.name + " " + "年龄:" + this.age + "<br>" ); } var stu1 = new student("Tom",28); var stu2 = new student( "Lily" , 24 ); studentinfo.call(stu1); studentinfo.call(stu2);9.10 this运算符 作用:引用对象本身 格式:this.属性名或方法名
9.11运算符优先级 一般情况下,都是用小括号提升优先级,优先执行小括号里面的,因此不用背运算符优先级表