JavaScript-表达式与运算符

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.属性名或方法名

(三)运算符优先级
   具有较高优先级的运算符先于较低优先级的运算符得到执行,同等级的运算符按从左到右的顺序执行

   编程时通常使用小括号,而不用背优先级表

猜你喜欢

转载自blog.csdn.net/yx970326/article/details/81121653