摘要:我们再把做一下修改正常不会报错这里,你会发现,作为分隔符作变量声明时,逗号后面的操作对象得是可以作为变量名的对象,否则会报错而用作操作符时则无需担心这个。
引子
逗号在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这里前面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 )结果是显而易见的。注意最后一种情况,这里没有第二个操作数,会报语法错误;
当然这里第二个(或者最右边的)操作对象为undefined、null、{}、""都可以正常解析,不写则会报错。我们再把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,就这样了,如有不对或错误之处,欢迎交流!
博客原文
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/81528.html
摘要:写在开头本篇是小红书笔记的第六篇,也许你会奇怪第六篇笔记才写语法基础,笔者是不是穿越了。可移步笔者的文章中替换方式参考文档高级程序设计作者以乐之名本文原创,有不当的地方欢迎指出。 showImg(https://segmentfault.com/img/bVblGMc?w=600&h=400); 写在开头 本篇是小红书笔记的第六篇,也许你会奇怪第六篇笔记才写语法基础,笔者是不是穿越了。...
摘要:本文首发于深入浅出区块链社区原文链接以太坊客户端命令用法参数详解原文已更新,请读者前往原文阅读在以太坊智能合约开发中最常用的工具必备开发工具,一个多用途的命令行工具。如果你还不知道是什么,请先阅读入门篇以太坊是什么。 本文首发于深入浅出区块链社区原文链接:以太坊客户端Geth命令用法-参数详解原文已更新,请读者前往原文阅读 Geth在以太坊智能合约开发中最常用的工具(必备开发工具),一...
摘要:什么是最佳的代码编程规范这可能是一个众口难调的问题。那么,不妨换个问题,什么代码规范最流行通过分析上托管的开源代码,得出了一些有趣的结果。基于次提交统计。 什么是最佳的JavaScript代码编程规范?这可能是一个众口难调的问题。那么,不妨换个问题,什么代码规范最流行? sideeffect.kr通过分析GitHub上托管的开源代码,得出了一些有趣的结果。一起来看看吧。 showI...
摘要:确定一个数是不是有穷的可用函数在最大值和最小值之间会返回函数在接收到一个值之后,会将该值转换成为数值。 确定一个数是不是有穷的可用inFinite()函数 在最大值和最小值之间会返回true isNaN()函数在接收到一个值之后,会将该值转换成为数值。任何不能被转换为数值的值都会导致这个函数返回true例如: alert(isNaN(NaN)); //true al...
阅读 3419·2023-04-26 02:31
阅读 3596·2021-11-23 09:51
阅读 1258·2021-11-17 09:33
阅读 2410·2021-11-16 11:45
阅读 2550·2021-10-11 11:12
阅读 2382·2021-09-22 15:22
阅读 2692·2021-09-04 16:40
阅读 2544·2021-07-30 15:30