JavaScript中的逗号运算符

逗号运算符,它将先计算左边的参数,再计算右边的参数值。然后返回最右边参数的值。

<script>


var a = 10, b = 20;


function CommaTest(){

return a++, b++, 10;

}


var c = CommaTest();


alert(a); // 返回11

alert(b); // 返回21

alert©; // 返回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(25, 24); // 输出10

</script>


上面这段代码输出10,但是如果根据逗号运算符的原理来解释的话,那应该是输出8才对。为什么呢?


因为逗号运算符在JavaScript在的优先级是最低的,记住这一点非常有用。所以函数调用运算符将先于逗号运算符运行。结果alert函数输出第一个参数的值。将上面的代码修改成如下所示即可。


<script>

alert((25, 24)); // 返回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 语句只允许单个表达式被执行。, 运算符被用来允许多个表达式被当作单个表达式,从而规避该限制。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript支持多种运算符,包括以下几类: 1. 算术运算符:用于处理数字值的加、减、乘、除等算术运算,例如: ```javascript var a = 5; var b = 3; var c = a + b; // 加法运算,结果为 8 var d = a - b; // 减法运算,结果为 2 var e = a * b; // 乘法运算,结果为 15 var f = a / b; // 除法运算,结果为 1.6666666666666667 var g = a % b; // 取模运算,结果为 2 ``` 2. 比较运算符:用于比较两个值的大小或相等性,返回一个布尔值,例如: ```javascript var a = 5; var b = 3; var c = (a > b); // 大于运算,结果为 true var d = (a < b); // 小于运算,结果为 false var e = (a >= b); // 大于等于运算,结果为 true var f = (a <= b); // 小于等于运算,结果为 false var g = (a == b); // 等于运算,结果为 false var h = (a != b); // 不等于运算,结果为 true ``` 3. 逻辑运算符:用于处理布尔值的逻辑运算,例如: ```javascript var a = true; var b = false; var c = (a && b); // 逻辑与运算,结果为 false var d = (a || b); // 逻辑或运算,结果为 true var e = !a; // 逻辑非运算,结果为 false ``` 4. 赋值运算符:用于对变量进行赋值操作,例如: ```javascript var a = 5; // 简单赋值运算 var b = 3; a += b; // 加法赋值运算,相当于 a = a + b a -= b; // 减法赋值运算,相当于 a = a - b a *= b; // 乘法赋值运算,相当于 a = a * b a /= b; // 除法赋值运算,相当于 a = a / b a %= b; // 取模赋值运算,相当于 a = a % b ``` 5. 位运算符:用于对二进制数字进行位运算,例如: ```javascript var a = 5; // 二进制表示为 101 var b = 3; // 二进制表示为 011 var c = a & b; // 按位与运算,结果为 1(二进制表示为 001) var d = a | b; // 按位或运算,结果为 7(二进制表示为 111) var e = a ^ b; // 按位异或运算,结果为 6(二进制表示为 110) var f = ~a; // 按位取反运算,结果为 -6(二进制表示为 11111111111111111111111111111010) var g = a << 1; // 左移运算,结果为 10(二进制表示为 1010) var h = a >> 1; // 右移运算,结果为 2(二进制表示为 10) ``` 6. 其他运算符:还有一些其他的运算符,如条件运算符(三元运算符)、逗号运算符等等,不再一一列举。 总的来说,JavaScript运算符非常丰富,可以满足不同场景下的计算需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值