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