JavaScript表达式与运算符

表达式


概念:

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

运算符

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

运算符完成操作的一系列符号,在 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=""

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,951评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,606评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,601评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,478评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,565评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,587评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,590评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,337评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,785评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,096评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,273评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,935评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,578评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,199评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,440评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,163评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,133评论 2 352

推荐阅读更多精彩内容