好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

逗号操作符

逗号操作符

逗号操作符 对它的每个操作数求值(从左到右),并返回最后 一个 操作数的值。(MDN)

逗号操作符会依此从左到右执行逗号分隔的表达式,并把最后 一个 表达式的运算结果作为最终结果。

  var  表达式的结果  =   ( 表达式 ,  表达式 ,  表达式 )  ; 
 

逗号操作符使用场景很有限,通常会用在 for 循环中,同时压缩 代码 也会用到大量的逗号表达式。

1. 运用在 for 循环中

  var  arr  =   [  ,   ,   ,   ,   ,   ]  ; 
 var  i ,  len ; 

 for   ( i  =   ,  len  =  arr . length ;  i  <  len ;  i ++  )   { 
  console .  log  ( arr [ i ]  )  ; 
 } 
 

for 循环的 初始语句 部分 要做 多件事情的时候,就会用逗号操作符。

上述例子在 初始语句 部分做了两个赋值操作,对应两个赋值表达式,使用逗号操作符,就会从左到右依次执行,对变量 i 和变量 len 进行赋值操作。

for 语句的三个部分根据不同的业务都有可能用到逗号操作符,结合逗号操作符可以让表达式更符合语义。
如上述例子中的 i = 0, len = arr.length; ,可以明确的表示把 i 变成 0 和 把 len 设置成 arr 的长度是初始操作。

但如果表达式太多,或者 一个 表达式很长,不太建议使用逗号操作符。

  var  person  =   { 
  father :   { 
    father :   { 
      father :   { 
        mother :   { 
          hobby :   [  '吃饭'  ,   '睡觉'  ,   '打游戏'  ]  , 
         } 
       } 
     } 
   } 
 }  ; 
 var  i ,  len ; 

 for   ( i  =   ,  len  =  person . father . father . father . mother . hobby . length ;  i  <  len ;  i ++  )   { 
  console .  log  ( person . father . father . father . mother . hobby [ i ]  )  ; 
 } 
 

这里要 获取 到某个人的 爸爸的爸爸的爸爸的妈妈 的爱好,就要写一长串。

这种情况应该避免,防止一行 代码 太长,很多 代码 规范也规定了一行 代码 不应超过 100 个字符。

可以考虑把 爸爸的爸爸的爸爸的妈妈 单独取出来操作。

  var  person  =   { 
  father :   { 
    father :   { 
      father :   { 
        mother :   { 
          hobby :   [  '吃饭'  ,   '睡觉'  ,   '打游戏'  ]  , 
         } 
       } 
     } 
   } 
 }  ; 

 var  hobby  =  person . father . father . father . mother . hobby ; 
 var  i ,  len ; 

 for   ( i  =   ,  len  =  hobby . length ;  i  <  len ;  i ++  )   { 
  console .  log  ( hobby [ i ]  )  ; 
 } 
 

再比如要 输出 一个 二维数组从右上到左下的对角线数据,也可以应用逗号操作符。

  var  arr  =   [ 
   [  ,   ,   ]  , 
   [  ,   ,   ]  , 
   [  ,   ,   ]  , 
 ]  ; 

 var  i ,  j ,  len ; 
 for   ( i  =   ,  j  =  arr . length  -   ;  arr [ i ]  ;  i ++  ,  j --  )   { 
  console .  log  ( arr [ i ]  [ j ]  )  ; 
 } 
 

输出 对角线,就是 输出 arr[0][2] 、 arr[1][1] 、 arr[2][0] ,利用逗号运算符就能很轻易的做到。

2. 用于 代码 压缩

通常不会手动对 代码 去进行压缩,都会借助 自动 化的工具。

代码 进行压缩后,体积会有显著的变化,如 3.5.0 版本 jquery 未压缩的体积大概是 280KB ,压缩后大约为 80KB 。

代码 压缩不仅仅是 去除 了空格,还会改变语法结构,但通常不影响执行结果。

如以下 函数 :

  function   encrypt  ( number )   { 
  number  +=   ; 

   return  number  /    -   ; 
 } 
 

压缩后的 代码 可能是这样的:

  function   encrypt  ( n )  {  return  n +=  , n /  -  } 
 

这是 一个 简单的数字加密 函数 ,利用逗号表达式的特性,就可以用于在 函数 中对连续的几个表达式进行压缩,最后 一个 表达式的结果就会是 函数 的返回值。

3. 声明多个变量的逗号

在 JavaScript 中,同时想声明多个变量,也是使用逗号进行分隔。

  var  i  =   ,  j ,  person  =   {  }  ,  arr  =   [  ]  ; 
 

这里的逗号并不属于逗号操作符 ,这是同时声明多个变量的语法,其具有自己的含义。

4. 小结

逗号操作符是很多前端开发者在第一次进行前端逆向工程(反向推测压缩混淆的 代码 )时碰到的,可以见得一般用的不多。

逗号操作符有时候可以 增加 代码 语义性,但不恰当的使用也会适得其反。如果逗号操作符让一行 代码 变得很行,应考虑其他方式实现。

void ? ?三元运算符

查看更多关于逗号操作符的详细内容...

  阅读:44次

上一篇

下一篇

第1节:什么是 JavaScript    第2节:学习环境准备    第3节:调试方案    第4节:JavaScript 变量    第5节:JavaScript 数据类型    第6节:JavaScript if 语句    第7节:for 语句    第8节:JavaScript 算数运算符    第9节:JavaScript 比较运算符    第10节:JavaScript 逻辑运算符    第11节:JavaScript 函数    第12节:JavaScript 表达式    第13节:JavaScript 对象    第14节:JavaScript 字符串    第15节:JavaScript 数字    第16节:JavaScript 数组    第17节:JavaScript switch 语句    第18节:JavaScript while 语句    第19节:JavaScript 的 break 与 continue    第20节:JavaScript with    第21节:document.cookie    第22节:JavaScript Function    第23节:JavaScript Math    第24节:JavaScript Date    第25节:JavaScript RegExp    第26节:JavaScript JSON    第27节:什么是 DOM    第28节:DOM 和 JavaScript 的关系    第29节:获取和操作 DOM 节点    第30节:DOM 与事件    第31节:DOM 事件绑定    第32节:DOM 事件对象    第33节:DOM 事件流    第34节:事件相关的优化    第35节:自定义事件    第36节:表单校验    第37节:什么是 BOM    第38节:常用的 BOM 相关对象    第39节:BOM 常用属性和方法    第40节:AJAX    第41节:异常处理    第42节:三元运算符    第43节:逗号操作符    第44节:void    第45节:typeof    第46节:delete 操作符    第47节:debugger    第48节:getter & setter    第49节:new 运算符与构造函数    第50节:JavaScript 原型    第51节:JavaScript instanceof    第52节:JavaScript this    第53节:严格模式    第54节:作用域    第55节:闭包    第56节:变量提升    第57节:对象包装器    第58节:Lodash    第59节:moment    第60节:swiper    第61节:ECMAScript 6    第62节:Node.js    第63节:Babel    第64节:CSS 预处理器    第65节:代码规范    第66节:TypeScript    第67节:WebComponents    第68节:Vue、React、Angular    第69节:小程序    第70节:JavaScript 关键字    第71节:分号导致的问题    第72节:对象属性访问问题    第73节:this 使用问题    第74节:浮点数精度问题    第75节:独一无二的 NaN    第76节:避免全局污染    第77节:控制台观察对象问题    第78节:根据环境选择语言特性    第79节:相关资源