JavaScript中的表达式由常量、变量和运算符组成,表达式可以作为参数传递给函数,还可以将表达式结果赋给变量保存起来
<script type="text/JavaScript">
var balance=1000.0;
var willpay=300.0;
balance-=willpay; <!--算术表达式-->
document.write("当前余额为 : " + balance + "<br>");
var willpay2=800;
if(balance<willpay2){ <!--逻辑表达式-->
document.write(("不足下次支付").fontcolor("Red"));
}
</script>
字符串表达式返回一个字符串,布尔表达式(逻辑表达式)返回一个布尔值,数值表达式返回一个数值
一、操作数(表达式中的常量或变量)
二、运算符(表达式中起运算作用的符号)
JavaScript操作数的类型是灵活多变的,通常由运算符类型、目标场合需求的类型来定。
(一)算数运算符
1.加法运算符
JavaScript中的“+”运算符连接两个数值类型操作数时就做数学加法运算,当其连接的两个操作数是字符串型时将作为“连接”运 算(将两个串连接起来)
<script type="text/JavaScript">
var a="4";
var b=3;
var c=a+b;
alert(c); <!--结果为43-->
</script>
操作数b先转换为字符串类型,再与字符串a进行连接操作
2.减法运算
<script type="text/JavaScript">
var totalGas="20升";
var used="7.5升";
var left=parseFloat(totalGas)-parseFloat(used);
alert("还剩汽油 " + left); <!--还剩汽油12.5升-->
</script>
JavaScript中数学运算符运用于非数字型操作数时将发生隐式转换
3.乘法运算符*
4.除法运算符/
返回的商是浮点型数据,除数不能为0,除数为0的情况在其他编程语言中将发生一个异常,而JavaScript中仅返回一个非数字 (NaN)
5.取模运算符%
6.负号运算符-(取反) var a=-b;
7.正号运算符+
8.自增运算符 ++
操作数++ 先用后加
++操作数 先加后用
9.自减运算符 --
操作数-- 先用后减
--操作数 先减后用
(自增自减运算符都是单目运算符,操作数只能是变量)
(二)关系运算符(比较两个操作数大、小、相等的运算符,返回一个布尔值)
1.相等运算符 == 判断两个操作数是否相等,如果相等返回true,不相等返回false
两个操作数的数据类型可以任意,也可以比较两个不同类型的操作数,运行时将"=="操作符两端的操作数转换为同一数据类型 再作比较
(JavaScript中的"=="运算符不是严格相等性判断,只要类型转换后的数据仍然相等的话就返回true)
<script type="text/JavaScript">
var a=10;
var b="10";
if(a==b){
alert("发生类型转换,a==b"); <!--发生类型转换,a==b-->
}
</script>
2.等同运算符 === 严格意义上的相等,两个值和它们的类型完全一致时才返回true
<script type="text/JavaScript">
var a=10;
var b="10";
if(a==b){
document.write("<li>发生类型转换,a==b"); <!--结果:发生类型转换,a==b-->
}
if(a===b){
document.write("<li>a严格等同于b");
}
else{
document.write("<li>在严格意义上,a不等于b"); <!--结果:在严格意义上,a不等于b-->
}
</script>
3.不等运算符 != 返回一个布尔值表示两个操作数是否相等,两个操作数类型任意,可以是常量也可以是变量
不等运算符两端的操作数如果经过类型转换后仍不相等则结果为true,否则为false,不是严格意义上的不相等
<script type="text/JavaScript">
var students= new Array("杨宗楠","杨玉婷","李莉");
for(index in students){
if(students[index]!="杨宗楠"){
document.write("<li>" + students[index]);
}
else{
var find=students[index].fontcolor("Red")
document.write("<li>" + find);
}
}
</script>
4.不等同运算符 !== 如果两个操作数严格不相等则返回true,否则返回false
5.小于运算符 < 返回一个布尔值
6.大于运算符 >
7.小于或等于运算符 <=
8.大于或等于运算符 >=
字符串也可以比较大小
9.in运算符(应用十分广泛,通常用于遍历集合中的所有元素,如数组)
<script language="JavaScript">
var fruit=new Array("梨","3.5","葡萄","7","香蕉","2","苹果","3","荔枝","6");
for(index in fruit){
if(index%2==0){ <!--如果为水果名-->
document.write("<li>" + fruit[index] + ": ");
}
else{ <!--如果为价钱-->
document.write(fruit[index] + "元\t");
}
}
</script>
10.instanceof运算符(返回一个布尔值,表明某个对象是否是某个类的实例,得到一个对象时有时需要知道其属于哪个类,确定对 象身份)
使用instanceof可以判断某个对象是否是某一个类的实例,当要确定对象的类型时可以使用typeof运算符
<script language="JavaScript">
var fruit=new Array("梨","葡萄","香蕉","苹果","荔枝");
var newf="橘子";
if(fruit instanceof Array){
fruit.push(newf);
}
document.write(fruit); <!--结果:梨,香蕉,苹果,荔枝,橘子-->
if(newf instanceof Array){
alert("newf是数组类型的");
}
else{
alert("newf不是数组类型的"); <!--newf不是数组类型的-->
}
</script>
11.字符串运算符(主要包括+、>、<、>=、<=这几种)
var str1="今天星期几了?";
var str2="星期五";
var str=str1+str2;
进行连接的两个字符串既可以是字符串常量,也可以是变量
12.赋值运算符 =
赋值运算符将值与变量绑定起来,通常仅声明的变量没有初值,仅宣布变量的存在,但并没有为其实际分配存储空间(var name;); 定义,声明并赋值,系统真正为变量分配存储空间
var name="Alice"; "="左边的操作数称为左值,右边的称为右值,左值必须是变量,右值可以是常量、变量或表达式
13.逻辑运算符(与、或、非等)
a.逻辑与运算符&&(双目运算符)
将第一个数与第二个数相与返回一个布尔值
<html>
<head>
<title>运算符练习</title>
</head>
<body>
<script language="javascript">
function Button1_onclick(){
var judge=true;
var num1=3;
var num2=25;
if(judge && (num1>=2) && (num2<=30)){
alert("您可以下载本资源!");
}
else{
alert("您不可以下载本资源!");
}
}
</script>
点击下载本影片
<input id="Button1" type="button" value="下载" onclick="return Button1_onclick()" /> <!--下载按钮-->
</body>
</html>
本例运行时打印“点击下载本影片”,后跟一个“下载按钮”,点击按钮后根据指定好的数据情况弹出写有不同的文字的框
b.逻辑或运算符||(双目运算符)
对两个数进行或操作,返回一个布尔值,操作数可以是变量或常量
c.逻辑非运算符!(单目运算符)
和逻辑非运算符结合后的数据类型皆被当做布尔型,操作数可以是常量或变量
14.位运算符(对变量的二进制位间进行逻辑运算,包括位与、位或、位异或、位非和移位运算)
a.位与运算&(两个操作数对应的二进制位相与,对应两个位都是1则结果值相应位也是1,否则为0)
通常用于测试某个操作数中的某位是否为1
<html>
<head>
<title>运算符练习</title>
</head>
<body>
<script language="javascript">
function Button1_onclick(){
var currentState=215;
if((currentState & 85) == 85){
alert("已经开通1、3、5、7车道");
}
else{
alert("1、3、5、7车道现在处于关闭状态");
}
}
</script>
<input id="Button1" type="button" value="查看1、3、5、7道是否已经通车" onclick="return Button1_onclick()" /> <!--下载按钮-->
</body>
</html>
b.位或运算符|(两个操作数对应位如果不都为0则结果对应位为1,否则结果为0)
c.位异或运算符 ^(两个操作数对应位不相同时结果对应位为1,否则为0)
d.位非运算符~(实现对操作数按位取反,单目运算符)
JavaScript中,对于字符串数据按位取反后值为-1,对布尔值true和false取反后分别得-2和-1,对数值数据+N按位取反后得- (N+1),-N按位取反后得N-1(不管原来的正负号,反正都是对N取反,减1)
15.左移运算符 << (整体左移低位补0,移位时一定要考虑因为符号位的移动而带来的影响)
16.带符号右移运算符 >> (当移动的是有符号数,左边空出来的位用数的符号位填充,向右移出的位将被丢弃--->带符号右移位 操作)
17.高位补0右移运算符 >>> (当数是无符号数时,右移后左边空出的位上填充0,向右移出的位将被丢弃---->无符号右移位操作)
18.其他运算符(条件运算符、new运算符、void运算符、typeof运算符、点运算符、数组存取运算符、delete运算符、逗号运算 符、this运算符等)
a.条件运算符 条件表达式 ? 语句1 : 语句2
b.new运算符
创建对象的一种方式是直接使用new运算符,该运算符创建一个类的对象实例。使用new运算符创建的对象若要删除须对引用对 象的变量赋null值
c.void运算符
有些地方不需要返回值,此时可以使用void运算符来避免表达式返回值。void可以使表达式被执行而结果被忽略,这一特性在一 些场合非常有用
d.类型检测运算符 typeof
typeof(表达式) typeof返回6种可能的值,分别为"Number"、"String"、"Boolean"、"Object"、"Function"、"undefined"
e.对象属性存取运算符 .
对象名.属性名或方法名
类名.方法名
f.数组存取运算符 []
数组名[]
g.delete运算符
要删除使用new运算符创建的对象需要将对象的引用赋值null,当引用为0时系统自动收回对象所占资源。delete运算符则可以删 除对象的一个属性或数组的一个元素
JavaScript的属性可以动态添加,对于动态添加的属性可以用delete运算符将其删除。
<script language="javascript">
var student=new Object();
student.name="Tom"; <!--为学生对象添加姓名属性-->
student.age=20; <!--为学生对象添加年龄属性-->
student.sex="男"; <!--为学生对象添加性别属性-->
document.write("<li>"+student["name"] + ":" + student["sex"] + " " +
student["age"] );
delete student.age; <!--删除学生对象的年龄属性-->
document.write("<br>删除了age属性<br><li>" + student["name"] + ":" + student["sex"] + " " + student["age"]);
</script>
h.逗号属性 , 作用是使其两边的表达式按左到右的顺序被执行,并返回最右边的表达式。
表达式1,表达式2
i.函数调用运算符 call,作用于Function运算符 主要功能:调用对象的一个方法,并以另一个对象做替换为当前对象,以改变this指 针的指向
对象名.call(thisObj,[arg])
其中对象名为一个有效的Function对象;
thisObj是即将换为当前上下文对象的对象引用,可选,当省略时自动设置为Global对象;
arg:是传递给Function对象的参数
使用call运算符可以改变函数执行上下文
<script language="javascript">
function showStudentInfo(){
document.write("<li>" + this.name + " " + this.age + "<br>");
}
function Student(_name,_age){
this.name=_name;
this.age=_age;
}
var stu1=new Student("Alice",18);
var stu2=new Student("Tom",22);
showStudentInfo.call(stu1);
showStudentInfo.call(stu2);
</script>
使用call运算符调用函数showStudentInfo,此时执行上下文分别改变为stu1和stu2,目的是重设函数对象showStudentInfo对象的this 指针的指向
call运算符提供了一种很好的改变执行上下文的机制
j.this运算符(可返回当前对象的引用,this通常用在对象构造函数中,用来引用函数对象本身)
this.属性名或方法名
(三)运算符优先级
具有较高优先级的运算符先于较低优先级的运算符得到执行,同等级的运算符按从左到右的顺序执行
编程时通常使用小括号,而不用背优先级表