Javascript 逗号

引子

逗号在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<len;i++,j++){
    //balabala...
}

这里前面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 )

结果是显而易见的。注意最后一种情况,这里没有第二个操作数,会报语法错误;
当然这里第二个(或者最右边的)操作对象为undefinednull{}''都可以正常解析,不写则会报错。

我们再把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,就这样了,如有不对或错误之处,欢迎交流!

博客原文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值