摘要:我們再把做一下修改正常不會報錯這里,你會發現,作為分隔符作變量聲明時,逗號后面的操作對象得是可以作為變量名的對象,否則會報錯而用作操作符時則無需擔心這個。
引子
逗號在javascript中很常見,那么這個有什么好說的呢?
先來看兩個例子吧:
var num = (1, 2, 3); console.log(num); // 3 function foo(){ alert(1, 2, 3); }; foo(); // 1
這中間到底發生了什么呢,先來安利一下概念,然后再來分析好吧^_^
逗號-按用途分類在javascript中,根據逗號使用的主要形式我們姑且可以分做兩類:
作為分隔符1、作為普通分隔符使用
2、作為操作符(運算符)使用
直接上例子吧
//1-1 var a, b, c; //1-2 var arr = [0, 1, 2, 3]; //1-3 function bar(arg1, arg2, arg3, arg4){ //balabala... }
這些都是很直接的用于分隔作用的:變量與變量之間、數組元素與元素之間、函數的參數與參數之間。
所以上面的foo()中,由于alert()只接受一個參數,所以默認第一個參數,故返回1。
逗號操作符 對它的每個操作對象求值(從左至右),然后返回最后一個操作對象的值
作為操作符時通常用于表達式中。當你想要在期望一個表達式的位置包含多個表達式時,可以使用逗號操作符。
上面(1, 2, 3)就是一個表達式,故從左至右,返回最后一個操作對象的值,故num = 3
示例與應用為了能夠更好的理解這兩種分類,我們再來多看一些示例。
//2-1 for(var i=0,j=0,len=10;i這里前面var語句中的逗號就起了分隔作用,講不同的變量聲明結合起來;
而后面的i++,j++語句中的逗號則是作為操作符,表達式從左至右依次計算。那么,我們將上面foo()修改為
//2-2 function foo(){ alert((1, 2, 3)); }; foo(); // 3此時,我們來分析下:
首先因為(),所以會先計算(1, 2, 3),而這是一個表達式,根據其概念會返回最右邊的操作數,故最終結果為alert(3);當然,也會一些下面的情況,我們可以看看:
//2-3 var a = 1,2,3; //error: Uncaught SyntaxError: Unexpected number var b = 1,""; //error: Uncaught SyntaxError: Unexpected string var c = 1,"字符串"; //error: Uncaught SyntaxError: Unexpected string這種情況瀏覽器會報錯,逗號后面的字符串或數字沒有聲明;
那么如果我們修改一下呢?//2-4 var a = (1,2,3); //3 var b = (1,""); //"" var c = (1,"字符串"); //字符串 var d = (1,); //error: Uncaught SyntaxError: Unexpected token )結果是顯而易見的。注意最后一種情況,這里沒有第二個操作數,會報語法錯誤;
當然這里第二個(或者最右邊的)操作對象為undefined、null、{}、""都可以正常解析,不寫則會報錯。我們再把2-1做一下修改:
//2-5 var a = 1,aa,bb,cc; //正常不會報錯 a=1 var a = 1,aa,2,cc; //error: Uncaught SyntaxError: Unexpected number var a = 1,aa,"",cc; //error: Uncaught SyntaxError: Unexpected string這里,你會發現,作為分隔符作變量聲明時,逗號后面的操作對象得是可以作為變量名的對象,否則會報錯;而用作操作符時則無需擔心這個。
說了這么多,我們來看看下面這個例子:
//2-6 function zoo(){ return 1,2,3; //3 } var i=0,j=1; function(){ return ++i, j++; //1 } var m = 1, n = 2; function(){ return ++m, m+n; //4 }so,就這樣了,如有不對或錯誤之處,歡迎交流!
博客原文
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/81528.html
摘要:寫在開頭本篇是小紅書筆記的第六篇,也許你會奇怪第六篇筆記才寫語法基礎,筆者是不是穿越了。可移步筆者的文章中替換方式參考文檔高級程序設計作者以樂之名本文原創,有不當的地方歡迎指出。 showImg(https://segmentfault.com/img/bVblGMc?w=600&h=400); 寫在開頭 本篇是小紅書筆記的第六篇,也許你會奇怪第六篇筆記才寫語法基礎,筆者是不是穿越了。...
摘要:本文首發于深入淺出區塊鏈社區原文鏈接以太坊客戶端命令用法參數詳解原文已更新,請讀者前往原文閱讀在以太坊智能合約開發中最常用的工具必備開發工具,一個多用途的命令行工具。如果你還不知道是什么,請先閱讀入門篇以太坊是什么。 本文首發于深入淺出區塊鏈社區原文鏈接:以太坊客戶端Geth命令用法-參數詳解原文已更新,請讀者前往原文閱讀 Geth在以太坊智能合約開發中最常用的工具(必備開發工具),一...
摘要:什么是最佳的代碼編程規范這可能是一個眾口難調的問題。那么,不妨換個問題,什么代碼規范最流行通過分析上托管的開源代碼,得出了一些有趣的結果。基于次提交統計。 什么是最佳的JavaScript代碼編程規范?這可能是一個眾口難調的問題。那么,不妨換個問題,什么代碼規范最流行? sideeffect.kr通過分析GitHub上托管的開源代碼,得出了一些有趣的結果。一起來看看吧。 showI...
摘要:確定一個數是不是有窮的可用函數在最大值和最小值之間會返回函數在接收到一個值之后,會將該值轉換成為數值。 確定一個數是不是有窮的可用inFinite()函數 在最大值和最小值之間會返回true isNaN()函數在接收到一個值之后,會將該值轉換成為數值。任何不能被轉換為數值的值都會導致這個函數返回true例如: alert(isNaN(NaN)); //true al...
閱讀 3455·2023-04-26 02:31
閱讀 3621·2021-11-23 09:51
閱讀 1287·2021-11-17 09:33
閱讀 2436·2021-11-16 11:45
閱讀 2566·2021-10-11 11:12
閱讀 2406·2021-09-22 15:22
閱讀 2713·2021-09-04 16:40
閱讀 2569·2021-07-30 15:30