浅谈JS中逗号运算符的用法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

浅谈JS中逗号运算符的⽤法
注意:
⼀、由于⽬前正在功读JavaScript技术,所以这⾥拿JavaScript为例。

你可以⾃⼰在PHP中试试。

⼆、JavaScript语法⽐较复杂,因此拿JavaScript做举例。

最近重新阅读JavaScript权威指南这本书,应该说很认真的阅读,于是便想把所学的东西多记录下来。


⾯本⼈将逐步写上更多关于本书的⽂章。

本⽂的理论知识来⾃于JavaScript权威指南,我这⾥做⼀下整理,或者说叫笔记。

如果你的基础够好的话,完全理解不成问题,但是如果读得有些郁闷的话,可以加我的QQ:76863715
阅读本⽂的前提是,你能区分什么是表达式,什么是语句。

还有明确运算符和运算数多是些啥东西。


谓的表达式就是—— ⼀个JavaScript的“短语“,JavaScript的解释器可以计算它,从⽽⽣成⼀个值。

表达式可
以分为以下三种:
1)直接量,如1.7是数字直接量、"JavaScript权威指南"是⼀个字符串直接量等。

2) 变量
直接量表达式的值就是这个直接量本⾝,变量表达式的值则是该变量所存放或引⽤的值。

3) 可以“合并”上⾯提到的“简单”表达式来创建为⽐较复杂的表达式。

例如1.7是表达式,i也是表达式,下⾯的代码所⽰的同样也是(也可以叫)表达式:
i + 1.7
上⾯这个表达式的值是两个简单表达式(⼀个变量表达式和⼀个简单表达式)的和。

在此例中,“+”是⼀个运算符,⽤于将两个简单表达式合并起来以组成⼀个复杂的表达式。

运算数的个数
可以根据运算符需要的运算数的个数对运算符进⾏分类,⼤多数运算符都是⼆元运算符,它们把两个“表达式”合并成⼀个复杂的表达式。

简⽽⾔之,就是它有两个运算数。

此外,JavaScript还⽀持⼤量的⼀元运算符,它能将⼀个表达式转换成另⼀个更复杂的表达式。

如表达式-3中,运算符“-”就是⼀元运算符,它执⾏操作是对运算数取反。

JavaScript还⽀持三元操作符“?:”,它可以将三个表达式合并为⼀个复杂的表达式。

OK,下⾯开始讲解逗号运算符。

逗号运算符,它将先计算左边的参数,再计算右边的参数值。

然后返回最右边参数的值。

原书举的例⼦不太好,⽆法解释上⾯那句话,这⾥另外提供⼀个:
<script>
var a = 10, b = 20;
function CommaTest(){
return a++, b++, 10;
}
var c = CommaTest();
alert(a); // 返回11
alert(b); // 返回21
alert(c); // 返回10
</script>
变量c的值是函数CommaTest返回的值,⽽a和b多加1了。

逗号运算符和函数调⽤运算符的冲突
在JavaScript中,函数调⽤确实是函数调⽤运算符。

它很特殊,因为其它编程语⾔资料中多从来没有这个叫法的。

然后,(才是)它没有固定数⽬的运算数。

函数调⽤运算符的第⼀个参数是⼀个函数名或者是⼀个引⽤函数的表达式,其后是括号()。

括号中间可以是数⽬不定的运算符,这些运算数可以是任意的表达式,它们之间⽤逗号隔开。

函数调⽤运算符将计算它的每⼀个运算数,第⼀个运算数指定为函数名(括号前),⽽括号中间的所有运算数的值将传递给这个函数作为函数的参数。

例如:
document.close()
Math.sin(x)
alert("Welcome " + name)
Date.UTC(2000, 11, 31, 23, 59, 59)
funcs.f(funcs.args[0], funcs.args[1])
知道了调⽤函数运算符后,我们举个例⼦说明关于如何处理它们冲突的事。

<script>
alert(2*5, 2*4); // 输出10
</script>
上⾯这段代码输出10,但是如果根据逗号运算符的原理来解释的话,那应该是输出8才对。

为什么呢?
因为逗号运算符在JavaScript在的优先级是最底的,记住这⼀点⾮常有⽤。

所以函数调⽤运算符将先于逗号运算符运⾏。

结果alert函数输出第⼀个参数的值。

将上⾯的代码修改成如下所⽰即可。

<script>
alert((2*5, 2*4)); // 返回8
</script>
逗号运算符和赋值运算赋的冲突
在JavaScript中,逗号运算符的优先级⽐赋值运算符还要底。

请看下⾯的代码。

<script>
var a = 20;
var b = ++a,10;
alert(b);
</script>
这段代码似乎不能运⾏,可能是由于赋值运算符优先于逗号表达式运⾏,如果将代码改成
<script>
var a = 20;
var b = (++a,10);
alert(b);
</script>
即可了。

上⾯说到的“可能”我们这⾥做⼀下解释,这是本⼈的⼀些看法,不⼀定权威。

逗号运算符要求它的运算数是⼀个复杂的表达式或简单的表达式(如变量或直接量),但由于赋值运算符优先于逗号运算符执⾏,因此变成左边不是⼀个运算数或⼀个表达式,⽽是⼀个含有var关键字的语句
之前不能执⾏的代码可以看成如下代码:
<script>
var a = 20;
(var b = ++a),10;
alert(b);
</script>
语句中有表达式语句,但不是所有的语句都是表达式。

#################################################
⼀、逗号运算符的特性及作⽤
逗号运算符的作⽤是将若⼲表达式连接起来。

它的优先级别在所有运算符中是最低的,结合⽅向是"⾃左⾄右"的。

如:3*3,4*4
⼆、逗号表达式
逗号表达式的⼀般形式是:表达式1,表达式2,表达式3……表达式n
逗号表达式的求解过程是:先计算表达式1的值,再计算表达式2的值,……⼀直计算到表达式n的值。

最后整个逗号表达式的值是表达式n的值。

看下⾯⼏个例⼦:
x=8*2,x*4 /*整个表达式的值为64,x的值为16*/
(x=8*2,x*4),x*2 /*整个表达式的值为128,x的值为16*/
x=(z=5,5*2) /*整个表达式为赋值表达式,它的值为10,z的值为5*/
x=z=5,5*2 /*整个表达式为逗号表达式,它的值为10,x和z的值都为5*/
逗号表达式⽤的地⽅不太多,⼀般情况是在给循环变量赋初值时才⽤得到。

所以程序中并不是所有的逗号都要看成逗号运算符,尤其是在函数调⽤时,各个参数是⽤逗号隔开的,这时逗号就不是逗号运算符。

如:printf(" %d,%d,%d",x,y,z);
###################################################
运算符使它两边的表达式以从左到右的顺序被执⾏,并获得右边表达式的值。

, 运算符最普通的⽤途是在 for 循环的递增表达式中使⽤。

例如:
for (i = 0; i < 10; i++, j++)
{
k = i + j;
}
每次通过循环的末端时, for 语句只允许单个表达式被执⾏。

, 运算符被⽤来允许多个表达式被当作单个表达式,从⽽规避该限制。

以上这篇浅谈JS中逗号运算符的⽤法就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

相关文档
最新文档