Javascript 逗号
逗号在javascript中很常见,那么这个有什么好说的呢?
先来看两个例子吧:
1 | var num = (1, 2, 3); |
这中间到底发生了什么呢,先来安利一下概念,然后再来分析好吧^_^.
逗号-按用途分类
在javascript中,根据逗号使用的主要形式我们姑且可以分做两类:
1 | 1、作为普通分隔符使用 |
作为分隔符
直接上例子吧
1 | //1-1 |
这些都是很直接的用于分隔作用的:变量与变量之间、数组元素与元素之间、函数的参数与参数之间。
所以上面的foo()中,由于alert()只接受一个参数,所以默认第一个参数,故返回1。
作为操作符(运算符)
逗号操作符 对它的每个操作对象求值(从左至右),然后返回最后一个操作对象的值
作为操作符时通常用于表达式中。当你想要在期望一个表达式的位置包含多个表达式时,可以使用逗号操作符。
上面(1, 2, 3)就是一个表达式,故从左至右,返回最后一个操作对象的值,故num = 3
示例与应用
为了能够更好的理解这两种分类,我们再来多看一些示例。
1 | //2-1 |
这里前面var语句中的逗号就起了分隔作用,讲不同的变量声明结合起来;
而后面的i++,j++语句中的逗号则是作为操作符,表达式从左至右依次计算。
那么,我们将上面foo()修改为
1 | //2-2 |
此时,我们来分析下:
首先因为(),所以会先计算(1, 2, 3),而这是一个表达式,根据其概念会返回最右边的操作数,故最终结果为alert(3);
当然,也会一些下面的情况,我们可以看看:
1 | //2-3 |
这种情况浏览器会报错,逗号后面的字符串或数字没有声明;
那么如果我们修改一下呢?
1 | //2-4 |
结果是显而易见的。注意最后一种情况,这里没有第二个操作数,会报语法错误;
当然这里第二个(或者最右边的)操作对象为undefined、null、{}、’’都可以正常解析,不写则会报错。
我们再把2-1做一下修改:
1 | //2-5 |
这里,你会发现,作为分隔符作变量声明时,逗号后面的操作对象得是可以作为变量名的对象,否则会报错;而用作操作符时则无需担心这个。
说了这么多,我们来看看下面这个例子:
1 | //2-6 |