成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

看了此文,你還敢說你懂了Javascript運算符嗎

開發 前端
JavaScript的很多奇技淫巧,都來自于對運算符的靈活使用。看了此文,你還敢說你懂了Javascript運算符嗎?
“JavaScript的很多奇技淫巧,都來自于對運算符的靈活使用。”
[[266625]]

 

1 運算符基礎

1.1 優先級: 優先級高的運算符***被執行

 問題: 1 || 1 ? 2 : 3 ; 
答案:2
解析:||的優先級高
相當于: (1 || 1 )? 2 : 3
而不是: 1 || (1 ? 2 : 3 )

1.2 關聯性: 運算符執行時的方向。是從左向右,還是從右向左

 問題:+function (){var a = b = 1;}();
console.log(b);
console.log(a);
答案:1 error
解析:賦值從右到左,var a = b = 1所以相當于
b = 1;
var a = b;
那有同學可能會問,為什么不是?
var b = 1;
var a = b;
還記得變量提升嗎?var a = b = 1;在變量提升的時候,只會把a去聲明,并不會執行賦值中的b。
所以要想把b也聲明了就需要按照語法 var a=1 , b ;

現在我們仔細把優先級的題改一下

 1 || fn() && fn() 

MDN上寫的是優先級高的運算符***被執行,我們都知道 ||是短路的,后邊不會執行。那么這個***被執行的含義是什么呢?

1.3 短路:

  • && 運算符的短路(a && b):如果a為假,b就不用執行了
  • | | 運算符的短路(a || b):如果a為真,b就不用執行了
 問題:1 || fn() && fn() 
答案:1 fn不會執行
解析:就是利用&&運算符的短路原理啊。

講到這有些同學會覺得很簡單啊,就是這樣啊,看到短路后邊就不用算了啊。也有的同學可能會有點懵,不是說好了, 優先級高的先被執行嗎?明明&&的優先級高啊。哈哈,別吵吵,我們一起看下一題。

 問題:var a = 42;
var b = "foo";
var c = 0;
c || b ? a : b ; // 42

剛才說短路的同學可能會說還是要參考優先級。剛才說優先級的同學可能一臉懵逼,靜靜地不想說話。那么我們開始今天的學習吧。

2 綁定

定義:運算符的優先級高先執行,并不是真正的執行,而是更強的綁定。

我們用上面來兩個問題

 1 || fn() && fn() // &&的優先級高,所以將后邊的綁定
1 ||(fn() && fn()) // 所以相當于1 和(fn() && fn())的值去邏輯或
1 ||(fn() && fn()) // 我們查表,邏輯或從左到右執行。
1 ||(fn() && fn()) // 左執行,1是真值,所以短路,后邊不執行
問題: var a = 42;
var b = "foo";
var c = 0;
c || b ? a : b ;
答案:42
解析:c || b ? a : b ; //查表 條件運算符權重是4,邏輯與符權重是6,所以邏輯與有更強的綁定
(c || b )? a : b ; //(c || b )相當于條件運算符里的條件
(c || b )? a : b ; //(c || b )值是0 ,所以值是 a

好,我們在做兩題鞏固一下

 問題: var a = 5;
var b = 5;
var c = 5+a+++b;
[ a , c ]
答案: [6, 15]
解析: b = 5+a+++b; //查表 后置遞增權重17 前置遞增權重16
b = 5 +(a++)+ b; //++優先級更高,所以和綁定a綁定在一起
b = 5 +(a++)+ b; //根據語法后置遞增先執行語句,后遞增
b = 5 +(a++)+ b; //執行語句時a是5,所以b是15
b = 5 +(a++)+ b; //a在進行自增,得到6
問題: var a = 5;
var b = 5;
var c = ++a-b;
[ a , c ]
答案: [6, 1]
解析: var c = ++a-b; //查表 前置遞增權重和一元減權重都是16,從左往右執行
var c = ++a-b; //根據語法前置遞增先遞增,后執行語句 a = 6
var c = ++a-b; //執行語句時a是6,所以b是1

看到這,同學們可能恍然大悟,就這么回事啊。別急,我們來看下一題。 要解決這個問題,需要我們理解下一節的概念。

 問題: var a = 42;
var b = "foo";
var c = 0;
a && b || c ? c || b ? a : c && b : a

3 關聯

定義:運算符的關聯性去定義表達式的處理方向

來,用題說話

 問題:a && b && c 的執行順序
解析:(1)兩個運算符都是&&,權重一樣。所以這個時候就要看關聯性。
(2)查表 &&的關聯性是從左到右
(3)所以表達式應該是 ( a && b ) && c
問題:a ? b :c ? d : e 的執行順序
解析:(1)兩個運算符都是條件運算符,權重一樣。所以這個時候就要看關聯性。
(2)查表條件運算符的關聯性是從右到左
(3)所以表達式應該是 a ? b :(c ? d : e )

好了,現在我們就可以輕松解決上面那個問題啦。

 問題: var a = 42;
var b = "foo";
var c = 0;
a && b || c ? c || b ? a : c && b : a
答案: 42
解析:(a && b) || c ? c || b ? a :(c && b) : a //首先查表邏輯與權重是6***
((a && b) || c) ? c || b ? a :(c && b) : a //然后是邏輯或
((a && b) || c) ? (c || b ? a :(c && b)) : a //兩個條件運算符,權重一樣。關聯性從右到左

啊、、有沒有很開心 ***的***,我們來講一個釋疑

4 釋疑

釋疑顧名思義就是解釋調疑惑的地方,那***的辦法就是加()。

如果你能夠熟練運用優先級/關聯的規則,你的代碼能更簡潔,許多框架都是這樣寫的,非常漂亮。

但是你要叫不準,那就加()吧,千萬別逞能,美其名曰有助于代碼的可閱讀性。 

責任編輯:龐桂玉 來源: 今日頭條
相關推薦

2019-01-30 13:44:34

JVM內存服務器

2017-09-23 15:17:21

散熱筆記本電腦藍屏

2022-03-03 23:56:29

JavaScriptArityAnonymous

2018-04-27 15:30:53

Java三目運算符

2021-06-07 09:55:58

JavaScript開發 技巧

2025-03-28 00:44:00

JavaScript屬性算法

2020-09-22 10:05:29

漏洞藍牙黑客

2021-02-20 23:34:22

JavaScript運算符開發

2017-05-11 16:38:07

javascript邏輯運算符

2020-08-21 08:24:32

裸辭招聘互聯網

2025-02-24 11:16:20

2021-06-07 09:20:56

Javascript運算符開發

2021-05-07 06:27:29

JavaScript運算符開發

2009-08-11 15:51:08

C#運算符算術運算符

2009-08-12 15:20:18

C#賦值運算符復合賦值運算符

2009-08-12 15:02:49

C#賦值運算符簡單賦值運算符

2020-10-15 08:11:56

JavaScript邏輯運算符

2021-07-12 15:35:56

JavaScript代碼運算符

2021-04-29 17:10:00

車聯網安全

2022-02-21 07:04:44

C#表達式運算符
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美在线视频一区二区 | 亚洲第一av| 少妇黄色 | 欧美日韩不卡合集视频 | 伦理午夜电影免费观看 | 日本精品在线播放 | 日韩免费激情视频 | www.操.com| 天天操天天舔 | 国产成人免费视频网站高清观看视频 | 欧美色影院 | 欧美性受xxxx| 99热精品久久 | 中文字幕在线观看av | 欧美成人二区 | 国产精品成人一区二区三区夜夜夜 | 精品成人一区 | 欧美a在线看 | 一区二区电影网 | 91免费在线视频 | 亚洲天天干| 欧美黄色小视频 | 午夜不卡福利视频 | 免费的色网站 | 日韩在线中文字幕 | 午夜精品久久久久久久久久久久 | 亚洲国产精品视频 | 手机看片1| 久久精品国产99国产精品亚洲 | 久久久久久国产 | 国产精品免费在线 | 亚洲欧美成人影院 | 日本欧美国产在线观看 | 国产日韩精品一区二区三区 | 久久久久久久久国产精品 | 五月天婷婷久久 | 国产精品久久久久久久久久不蜜臀 | 黄色一级毛片 | 久久国产麻豆 | 国产永久免费 | 欧美二区三区 |