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

JavaScript中逗號運算符,鮮為人知的秘密

開發 前端
逗點算符可與一組表達式運算符相配合,產生顯著作用,但是其使用方式的演變卻使人混淆不清。之所以出現這種情況,一部分原因在于逗號在JavaScript里面有很多其他的含義。

逗點算符可與一組表達式運算符相配合,產生顯著作用,但是其使用方式的演變卻使人混淆不清。

之所以出現這種情況,一部分原因在于逗號在JavaScript里面有很多其他的含義。

所以為了使人了然于心,參與逗號以下兩種表達式時,逗號就是單純的逗點算符:左手側表達和右手側表達式。

這些表達式也含有其他運算符、變量和函數。

JavaScript

逗號運算符有何作用

它可按順序連接兩個表達式,先從左到右估算所有運算數,然后返回最后一個運算數的值。

需要注意的是,逗號運算符不同于數組、對象、函數參數中的逗號。

  1. let x = 10;x = (x--, x);console.log(x); 
  2. // expected output: 9x = (20, 30);console.log(x); 
  3. // expected output: 30 

在上面的例子中必須使用圓括號,因為逗號運算符在所有JavaScript中的優先級是最低的。如果沒有圓括號,表達式可能會被修改為這樣:

  1. x = (20), 30; 

上面的語句最終是將20賦給X,并舍去右側表達式的值。這里自然會想到為什么要使用括號賦值呢?直接賦值不就好了。

答案是一些運算符以及大多數的函數都會有副作用。舉個例子,

  1. varr = (console.log(1),console.log(2),console.log(3),4); 

可以看到1,2,3顯示在控制面板上,4賦值給變量varr。在上面的例子中,如果想代替逗號運算符,也可以像下面這樣使用分號:

  1. console.log(1); console.log(2); console.log(3); varr = 4

不過,這里的關鍵在于,分號分隔語句,而逗號分隔表達式,并且有時語句也是表達式。

示例展示

  1. var var1, var2, var3;var1 = var2 = 10, var3 = 20;// Returns  in console 
  2. console.log(var1); // 10 (left-most)var1 = (var2 = 30var3 = 40); // Returns 6in console 
  3. console.log(var1); // 40 (right-most) 

屬性鍵的計算:(這個例子相當棘手)

  1. const map = { 
  2.   [1 << 0]: "Batman", 
  3.   [1 << 1]: "Superman", 
  4.   [1 << 2]: "Flash" 
  5. };console.log(map); 
  6. // { '1': 'Batman', '2': 'Superman', '4': 'Flash' } 

用例

以下是一些逗號運算符常見的用例:

  • 同時聲明多個變量:var x = 0, y = 0, z = 0;
  • 列出數組常量中(arrayliterals)的元素:[2, 4, 8, 10, 20, 32]
  • 分離對象文字的屬性: { min: 0,max: 100 }
  • 定義多個變量參數:function multiply(a, b) { return a * b; }
  • 調用具有多個函數的參數:multiply(2, 6)
  • 重組數列:const [lower, upper] = [0, 1];
  • 重構對象: const {min, max } = { min: 0, max: 100 };
  • 導入多個模塊成員:import { open, close } from "fs";
  • 輸出多個模塊成員: export {mkdir, rmdir };

上面所有的例子在語句構成上都是正確的,并且都包含一個逗號,但是其中沒有一個采用了逗號運算符實際用法。下面是我能想到的一些用例:

  • 用于將一個預期表達式替換成多個表達式的位置。由逗號分隔的多個表達式的結果值等同于最后一個逗號分隔的表達式的值。
  • 常用于在JavaScript中編寫功能代碼。
  • 亦常用于for循環中提供多個參數。
  1. // j is initialized to some other value 
  2. // as the for loop executes both i and j are incremented 
  3. // because the comma operator allows two statements to be put in place of one 
  4. for (var i = 0; i < items.length; i++, j++) { 
  5.     // loop code here that operates onitems[i] 
  6.     // and sometimes uses j to access adifferent array 

在上述例子中,i++、j++可以放在允許一個表達式置入的地方。在這種特殊的情況下,多個表達式的使用會產生副作用,因此復合表達式接不接受最后一個值都并不重要,但是也不排除一些情況下可能也舉足輕重。

瀏覽器兼容性

責任編輯:趙寧寧 來源: 今日頭條
相關推薦

2020-06-05 14:11:21

Swift運算符代碼

2022-08-24 15:02:17

JS空值合并運算符

2015-08-18 10:57:52

機房制冷數據中心

2019-12-12 20:49:05

JavaScript語言運算符

2021-05-10 08:05:13

Linux內核頁表

2024-03-04 16:32:02

JavaScript運算符

2017-12-12 12:35:07

云安全云服務安全

2017-12-22 11:05:28

云技術混合云信息化

2010-01-07 10:05:51

IT顧問特質

2024-08-26 08:36:26

2024-08-20 16:04:27

JavaScript開發

2009-02-09 10:09:38

2024-09-10 08:35:57

2024-03-21 14:27:13

JavaScript數組

2009-02-09 09:16:28

熱鍵自注銷漏洞

2025-01-26 10:35:42

Go語言類型

2011-05-03 13:13:52

編程PHPJava

2014-04-22 16:38:12

GitHubGitHub 使用技巧

2021-05-07 06:27:29

JavaScript運算符開發

2009-09-14 09:45:20

Chrome谷歌操作系統
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美电影免费网站 | 久久久久国 | 艹逼网| 第一av| 亚洲国产欧美91 | 日韩第1页 | 性一爱一乱一交一视频 | 久久精品国产免费 | 伊人二区 | 极品粉嫩国产48尤物在线播放 | 欧美精品一区二区免费视频 | 国产精品成人一区二区三区 | 99精品国产一区二区三区 | 国产成人精品福利 | 中文字幕成人 | 国产精华一区 | 91在线免费视频 | aaaaaaa片毛片免费观看 | 成人二区 | 日韩中文字幕一区二区 | 欧美黑人国产人伦爽爽爽 | 成人精品在线观看 | 成人午夜免费视频 | 日韩视频一区二区 | www国产成人| 成人国产精品入口免费视频 | 国产精品久久久久久久7电影 | 久久久久久久国产 | 亚洲高清三级 | 日本成人在线网址 | 欧美亚洲高清 | 5060网一级毛片 | 国产福利资源在线 | 国产美女精品视频 | 91在线电影 | av在线天堂网 | 亚洲免费在线视频 | 欧美中文字幕一区二区 | 成人亚洲性情网站www在线观看 | 超碰在线播 | 自拍偷拍中文字幕 |