逗号运算符的用法详解
注意:
一、由于目前正在功读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 语句只允许单个表达式被执行。, 运算符被用来允许多个表达式被当作单个表达式,从而规避该限制。
相关推荐
"JavaScript数组用法详解" JavaScript 数组是一种非常重要的数据结构,它是一种可以存储多个元素的集合。 JavaScript 数组的元素可以是任何类型,包括数字、字符串、对象、函数等。数组的长度可以动态地变化,可以...
例如,通过逻辑运算符`||`和逗号运算符,我们可以将多层的`if...else`结构压缩为一行,如`((a===1)(true,a=2))||((a===3)(true,a=4))||(a=5)`。不过,这样的写法虽然节省了行数,但可能增加代码的阅读难度。使用三元...
### MATLAB 逗号分隔列表详解 #### 一、引言 在MATLAB中,逗号分隔列表(Comma Separated List, CSL)是一种特殊的数据结构,它允许用户存储和处理一系列相同类型的数据元素。这种列表非常适合于执行批量操作,如...
JavaScript 中冒号的用法详解 冒号(:)是 JavaScript 中一个非常重要的符号,它有多种用法,下面将对其进行详细的解释。 1. 声明对象直接量的成员 JavaScript 中的对象可以像 C#、JAVA 这些面向对象的语言中的...
- **逗号运算符**:用于连接多个表达式,并返回最后一个表达式的值。 #### 五、ECMAScript语句 - **if语句**:if语句用于基于条件执行代码块。 - **迭代语句**:包括for、while、do...while等循环语句,用于重复...
- **逗号运算符**:通常用于顺序执行多个表达式。 #### 五、ECMAScript语句 - **if语句**:用于根据条件执行不同的代码块。 - **迭代语句**:包括for循环、while循环等,用于重复执行一段代码直至满足停止条件。 ...
查询和设置属性可以使用点符号(.)或方括号([])运算符。方括号允许使用变量、字符串字面量或者包含特殊字符的属性名,而点符号则只适用于以字母、下划线或美元符号开头的有效标识符属性名。 例如: ```...
逗号运算符 (``,`)** - 示例: ```javascript var x = (a = 5, b = 10); // 最后一个表达式的值被赋值给 x ``` **10. new 运算符** - 用于创建对象实例。 - 示例: ```javascript var obj = new Object(); ...
使用||运算符可以为不存在的属性提供默认值。对于对象方法的调用,同样可以使用点语法。 对象的值是可以修改的,这通过赋值操作实现。如果属性不存在,则添加该属性;如果属性已存在,则更新其值。需要注意的是,...
- **逻辑运算符、逗号运算符**:在特定场景下的用途。 7. **表达式** - 如何正确构建有效的表达式,理解优先级和计算顺序。 8. **循环结构** - **for循环**:基本语法和应用场景。 - **for...of**:遍历可迭代...
### 前端JS代码规范详解 #### 一、引言 随着前端技术的不断发展,JavaScript作为一门重要的编程语言,在Web开发中扮演着至关重要的角色。为了提高代码的可读性和可维护性,制定一套统一的编码规范显得尤为重要。...
拓展运算符允许一个表达式在某处展开成为一个用逗号分隔的值序列。在数组中,它可以用来将数组元素展开成为单独的参数。 - **合并数组**:通过拓展运算符可以方便地合并多个数组。 - **与解构赋值结合**:结合解构...
8. **逗号运算符`,`**: ```javascript function() { console.log(this); }(), 'other expression'; ``` 9. **按位异或运算符`^`**: ```javascript ^function() { console.log(this); }(); ``` 10. **比较...
在条件判断语句中,`if-else`结构虽然清晰,但在某些情况下可以使用更简洁的表达式,如利用逻辑运算符`||`和`&&`配合逗号运算符`,`或三元运算符`? :`。例如,可以将一段`if-else`语句改写为一行代码,尽管这可能...
- **答案解析**: `join()`默认使用逗号`,`连接数组元素,如果不传入参数,则默认使用逗号。 - **答案**: B.1,2,3 **5. 字符串与数字相加** - **知识点**: 字符串拼接与数值运算。 - **答案解析**: 当字符串与数字...
在JavaScript中,双等号(==)用于比较两个值是否相等,但在这个过程中,它可能会引起隐性类型转换,即在比较之前自动...在编写JavaScript时,应尽可能使用严格相等运算符(===),以防止不必要的类型转换带来的困扰。
### JavaScript核心知识点详解 #### 一、对象的创建及操作 **对象定义:** 对象是JavaScript中最核心的数据结构之一,可以将其视为一组无序的已命名的属性集合。每个属性都可以是一个简单的值(如字符串、数字)...
### JavaScript编程规范详解 #### 1. 前言 JavaScript 是一种强大的脚本语言,在前端开发中扮演着至关重要的角色。随着项目规模的增长和技术的发展,制定统一的编码规范变得越来越重要。良好的编码规范不仅能提高...
在编程语言中,JavaScript是一种广泛使用的脚本语言,特别是在网页开发中。它支持面向对象的编程范式,对象和数组是实现这一范式的关键组件。面向对象编程(OOP)提供了封装、聚集、继承和多态的概念,使得代码更加...
### JavaScript大集合知识点详解 #### 一、HTML与JavaScript概览 **HTML**(HyperText Markup Language)是一种标准标记语言,用于创建网页。而**JavaScript**则是一种编程语言,广泛应用于网页开发中,用于实现...