JavaScript表达式与运算符

作者: 简约酒馆 | 来源:发表于2019-11-03 20:14 被阅读0次

    表达式


    概念:

    将同类型的数据(如常量、变量、函数等),用运算符号按一定的规则连接起来的、有意义的式子称为表达式。

    运算符

    运算符用于执行程序代码运算

    运算符完成操作的一系列符号,在 JavaScript 中有算术运算符,如+、-、*、/、%等;有比较运算符如!=、==等;有逻辑运算符如!(取反)、&&、||; 有字符串运算如+ 、 +=等。

    大多数的运算符都是由标点符号表示的,比如“+”和“=”。而另外一些运算符则是由关键字表示的。比如delete和instanceof。

    操作数的个数:一元运算符  二元运算符 三元运算符

    运算符可以根据其操作数的个数进行分类。

    javascript中大多数的运算符(比如“*”乘法运算符)是一个二元运算符,将两个表达式合并成一个稍复杂的表达式。换言之他们的操作数是两个。

    javascript同样支持一些一元运算符,比如表达式-x中的“-”运算符就是一个一元运算符,是将操作数x求负值。

    最后。javascript支持一个三元运算符,条件判断运算符“?:”,它将三个表达式合并成一个表达式。

    运算符的优先级

    最基本的运算符优先级就是所谓的“ 先乘除, 后加减” 。 

    对于优先顺序处于同一层次上的运算符, 按照从左到右出现的顺序计算。

    typeof 是优先级别最高的运算符之一。

    如果你不确定你所使用的运算符的优先级,最简单的办法就是使用圆括号来强行指定运算次序。

    赋值运算的优先级非常低,通常都是最后执行。

    运算符的结合性

    概念:相同优先级的运算符在同一个表达式中,且没有括号的时候,运算符和操作数的结合方式。

    通常有从左到右结合和从右向左结合两种方式。

    (左结合性和右结合性)

    算数表达式

    “+”运算符

    二元加法运算符“+”可以对两个数字做加法

    一元算数运算符

    定义:一元运算符作用于一个单独的操作数,并产生一个新值。

    在javascript中,一元运算符具有很高的优先级,而且都是右结

    合。

    (+、-、++和--),必要时,它们会将操作数转换为数字。需

    要注意的是,”+”和”-”是一元运算符,也是二元运算符。

    <1>一元加法(+)

    把操作符转换为数字(或者NaN),并返回这个数字。

    <2>一元减法

    把操作符转换为数字然后改变运算结果的符号。

    <3>递增(++)

        “++”运算符对其操作数进行增量(加一)操作,运算符将

    操作数转换为数字,然后给数字加1,并将加1后的数值重新

    赋值给变量、数组元素或者对象属性。

        递增“++”运算符的返回值依赖于它相对于操作数的位置。

    当运算符在操作数之前,称为前增量运算符,他对操作数进

    行增量计算,并返回计算后的值。    当运算符在操作数之后,

    称为后增量运算符,它对操作数进行增量计算,但返回未做

    增量计算的值。

    var i

    = 1; j = ++i;

    <4>递减(--)同理

    乘法运算符

    乘法运算符由星号(*)表示,用于两数相乘。

    不过,在处理特殊值时,ECMAScript

    中的乘法还有一些特殊行为:

    如果结果太大或太小,那么生成的结果是

    Infinity 或 -Infinity。

    如果某个运算数是

    NaN,结果为 NaN。

    Infinity乘以 0,结果为 NaN。

    Infinity乘以 0 以外的任何数字,结果为 Infinity 或 -Infinity。

    Infinity乘以 Infinity,结果为 Infinity。

    除法运算符

    除法运算符由斜杠(/)表示,用第二个运算数除第一个运算数:

    与乘法运算符相似,在处理特殊值时,除法运算符也有一些特殊行为:

    如果结果太大或太小,那么生成的结果是 Infinity 或 -Infinity。

    如果某个运算数是 NaN,结果为 NaN。

    Infinity 被 Infinity 除,结果为 NaN。

    Infinity 被任何数字除,结果为 Infinity。

    Infinity 被 0 以外的任何数字除,结果为 Infinity 或-Infinity。

    取模运算符

    取模(余数)运算符由百分号(%)表示,与其他乘性运算符相似,对于特殊值,取模运算符也有特殊的行为:

    如果被除数是 Infinity,或除数是 0,结果为 NaN。

    Infinity 被 Infinity 除,结果为 NaN。

    如果除数是无穷大的数,结果为被除数。

    如果被除数为 0,结果为 0。

    关系表达式

    关系运算符用于测试两个值之间的关系,根据关系是否存在而返回true或false,关系表达式总是返回一个布尔值。通常在if、while、或者for语句中使用关系表达式,用于控制程序的执行流程。

    相等和不等运算符

        等号由双等号(==)表示,当且仅当两个运算数相等时,它返回true。非等号由感叹号加等号(!=)表示,当且仅当两个运算数不相等时,它返回 true。为确定两个运算数是否相等,这两个运算符都会进行类型转换。

    执行类型转换的规则如下:

    a如果一个运算数是 Boolean值,在检查相等性之前,把它转换成数字值。false 转换成 0,true 为 1。

    b如果一个运算数是字符串,另一个是数字,在检查相等性之前,要尝试把字符串转换成数字。

    c如果一个运算数是对象,另一个是字符串,在检查相等性之前,要尝试把对象转换成字符串。

    d如果一个运算数是对象,另一个是数字,在检查相等性之前,要尝试把对象转换成数字。

    在比较时,该运算符还遵守下列规则:

    值:null 和 undefined 相等。

    在检查相等性时,不能把

    null 和 undefined 转换成其他值。

    如果某个运算数是

    NaN,等号将返回 false,非等号将返回 true。

    如果两个运算数都是对象,那么比较的是它们的引用值。如果两个运算数指向同一对象,那么等号返回

    true,否则两个运算数不等。

    重要提示:即使两个数都是

    NaN,等号仍然返回 false,因为根据规则,NaN 不等于 NaN。

    全等号和非全等号

    等号和非等号的同类运算符是全等号和非全等号。这两个运

    算符所做的与等号和非等号相同,只是它们在检查相等性前,

    ****(不执行类型转换)

    全等号由三个等号表示(===),只有在无需类型转换运算数就相等的情况下,才返回true。

    比较运算符

    较和逻辑运算符用于测试 true 或 false

    小于(<)、大于(>)、小于等于(<=)和大于等于(>=)这几个关系操作符用于对两个值进行比较,规则和数学里面一样。都返回一个布尔值。

    所有涉及到NaN的比较均返回false

    可以有文本类型和数字类型比较,会转换为数字比较

    若全是文本类型,则最后才是关键,按每个字符的 charCode大小进行比较,直到分出大小为止

    比较运算符在逻辑语句中使用,以测定变量或值是否相等。

    Eg:给定 x=5,下面的表格解释了比较运算符:

    逻辑运算符(用于测定变量或值之间的逻辑)


    逻辑与(&&)

     && 运算符可以从三个不同层次进行理解:

    (1)当操作数都是布尔值的时候,&&对两个值执行布尔与操作,只有在两个操作数都是true的时候,才返回true。

    (2)&&的操作数并不一定是布尔值,还有真值和假值null.undefined,0,-0,NaN,false,'所以,第二层理解是,&&可以对真值和假值进行布尔与操作。如果都是真值,那么返回一个真值,否则,至少一个是假值,则返回一个假值。在JavaScript中任何希望使用布尔值的地方,表达式和语句都会将其当做真值和假值来对待,&&并不总是返回true和false,但并无大碍。

    (3)&&运算符首先计算左操作数的值,如果是假值,那么整个表达式的结果一定是假值,因此&&这时简单的返回左操作数的值,而并不会对右操作数进行计算;如果左操作数是真值,那么整个表达式的结果依赖于右操作数的值;此时,&&运算符将计算右操作数的值并将其返回作为整个表达式的计算结果。

    逻辑或(||)

    ||运算符对两个操作数做布尔或运算,如果其中一个或者两个操作数是真值,返回一个真值,如果两个操作数都是假值,返回一个假值。

       和&& 类似,|| 并不仅仅会做布尔值的运算,它也具有一些更复杂的行为。

       如果||的左操作数是真值,则返回这个真值;左操作数是假值,此时依赖右操作数,计算右侧表达式并返回值

    逻辑非(!)

    定义:对一个表达式执行逻辑求反操作。

    语法: result = !expression

    通俗易懂的解释就是:不是result 正确就是expression错误,

    result为true ,expression就为false。

        result和expression  就是相反的值。

    “!”与“&&”和“||”不同,“!”运算符首先将其操作数转换为布尔值,然后再对布尔值求反,也就是说“!”只返回布尔值true或false

    "!"具有很高的优先级,如果希望对q&& p求反,则需要使用圆括号:!(p && q)

    赋值运算符

    赋值运算符用于给JavaScript 变量赋值。

    1.简单的赋值运算符由等号(=)实现,只是把等号右边的值赋予等号左边的变量。

    var Num = 10;

    2.复合赋值运算是由乘性运算符、加性运算符加等号(=)实现的。

    乘法/赋值(*=)

    除法/赋值(/=)

    取模/赋值(%=)

    加法/赋值(+=)

    减法/赋值(-=)

    3.其他运算符

    条件(三目)运算符(?:)

    条件运算符是

    ECMAScript 中功能最多的运算符,它的形式与 Java 中的相同

    4void运算符的应用场合

    void是一个操作符,该操作符指定要计算一个表达式但是不返回值。

    void操作符用法格式如下:

    1.javascript:void (expression)

    2.javascript:void expression

    expression是一个要计算的 Javascript 标准的表达式。表达式外侧的圆括号是选的,但是写上去是一个好习惯。

    javascript:void(0)表示不做任何动作

     这里表示这个链接不做跳转动作,执行onClick事件。ahref=#与 a href=javascript:void(0) 的区别 链接的几种办法#包含了一个位置信息,默认的锚是#top也就是网页的上端而javascript:void(0)  仅仅表示一个死链接。这就是为什么有的时候页面很长浏览链接明明是#但是跳动到了页首而javascript:void(0)则不是如此。所以调用脚本的时候最好用void(0)或者<input onclick><div onclick>等

    .总结:

    a、void(0)用于执行某些处理,是不整体刷新页面的情况下,但是在需要对页面进行refresh的情况下,那就要仔细了。

    b、其实我们可以这样用<ahref=”javascript:void(document.form.submit())”>,这句话会进行一次submit操作。那什么情

    况下用void(0)比较多呢,无刷新,当然是Ajax了,看一下Ajax的web页面的话,一般都会看到有很多的void(0),:)

    ,所以在使用void(0)之前,最好先想一想,这个页面是否需要整体刷新

    c、 说白了,href="#"这种形式会整体刷新页面,而

    href="javascript:void(0)" 则不会

    5.逗号运算符(,)

    定义:用逗号运算符可以在一条语句中执行多个运算。

    Eg:var iNum1 = 1, iNum2 = 2, iNum3 = 3;

    逗号运算符常用变量声明中。

    逗号运算符是一个二元运算符,它的操作数可以是任意类型。它首先计算左操作数,然后计算右操作数,最后返回右操作数的值

    链接的几种办法

    1.window.open(''url'')

    2用自定义函数

    <script>

      function openWin(tag,obj)

      {

       obj.target="_blank";

       obj.href = "Web/Substation/Substation.aspx?stationno="+tag;

       obj.click();

      }

    </script>

    <a href="javascript:void(0)"

    onclick="openWin(3,this)">广州</a>

     window.location.href=""

    相关文章

      网友评论

        本文标题:JavaScript表达式与运算符

        本文链接:https://www.haomeiwen.com/subject/tvnkbctx.html