逗号运算符

逗号运算符是二元运算符,它的操作数可以是任意类型。它首先计算左操作数,然后计算右操作数,最后返回右操作数的值,用逗号运算符可以在一条语句中执行多个运算

作用:

1.在一条语句中从左到右执行多个运算

2.返回右边最后一个值作为表达式的结果(经常被忽略但是却很重要的特性)

(i = 0), (j = 1), (k = 2);
//计算结果是2,它和下面的代码基本等价
i = 0;
j = 1;
k = 2;
console.log(((i = 1), (j = 2), (k = 3))); //计算结果为2

应用场景:

1.同时声明多个变量

var iNum1 = 1,
iNum = 2,
iNum3 = 3;

2.for 循环中三部分有多个变量时,使用,分割

var k;
for (var i = 0, j = 0; i < 6, j < 10; i++, j++) {
k = i + j;
}
console.log(k);

来一道醍醐灌顶的面试题:

var k;
for (var i = 0, j = 0; i < 6, j < 10; i++, j++) {
k = i + j;
}
console.log(k); //k=?

结果推测:

  1. k=10

    解析:

    因为 i=6 时,不满足条件,跳出循环。(关系间为&&关系)
  2. k=12

    基础原因考虑到 1,然后推测 k=i+j 是引用函数中的 i、j 所以当 log(k)的时候,应该输出 i、j 循坏结束后的值即 i=j=6(闭包后遗症)
  3. k=18

    因为 i < 6, j < 10 是或的关系,需要两者同时值为 false
  4. k=18

    逗号运算符从左到右依次计算每个操作符,最终结果由最右的操作数决定,j<10 才为中止条件。

输出答案:

console.log(k); //k=18

3、4 推测验证:

var k;
for (var i = 0, j = 0; i < 6, j < 10, 2 < 1; i++, j++) {
k = i + j;
}
console.log(k);

验证分析:

1.逗号分隔的是或的关系,那么需要所有表达式都为false,结果依然为18

2.逗号分隔为运算符,那么条件判断最终结果为最右表达式2<1,那么将不进入循环,直接输出undefiend

验证结果:

console.log(k);//k=undefined

结果分析,最终输出k=undefined,for中的判断表示式使用逗号分隔时,遵循逗号运算符的基本规则,最终结果由最右的操作数决定

js中的逗号运算符的更多相关文章

  1. js中的等值运算符(抽象相等==与严格相等===的区别)

    js中的等值运算符 js中的相等分为抽象相等和严格相等,他们有什么区别呢. 在说具体算法前,先提下JS数据类型,JS数据类型分为6类:Undefined Null String Number Bool ...

  2. JavaScript中的逗号运算符

    JavaScript逗号运算符  阅读本文的前提,明确表达式.短语.运算符.运算数这几个概念. 所谓表达式,就是一个JavaScript的“短语”,JavaScript解释器可以计算它,从而生成一个值 ...

  3. JS中的各类运算符

    2020-04-15 JS中的各类运算符 // 假设有如下代码,那么a(10)的返回结果是?( ) function a(a) { a^=(1<<4)-1; return a; } // ...

  4. C语言中关于逗号运算符的理解

    在C语言中运算符有很多,包括算数运算符.关系运算符.赋值运算符.位运算符.逻辑运算符.三目运算符.sizeof运算符.逗号运算符等等,那今天我们就重点来给大家讨论一下关于逗号运算符的一些运算规则. 首 ...

  5. js中的instanceof运算符

    概述 instanceof运算符用来判断一个构造函数的prototype属性所指向的对象是否存在另外一个要检测对象的原型链上 语法 obj instanceof Object;//true 实例obj ...

  6. js中对于逗号的运算符!

    先展示一个例子! var f = (function f() { return '1'; } , function g(){ return 1; } )(); console.log(typeof f ...

  7. JS中的加号+运算符详解

    加号+运算符 在 JavaScript 中,加法的规则其实很简单,只有两种情况: 把数字和数字相加 把字符串和字符串相加 所有其他类型的值都会被自动转换成这两种类型的值. 为了能够弄明白这种隐式转换是 ...

  8. js中的位运算符 ,按位操作符

    按位操作符(Bitwise operators) 将其操作数(operands)当作32位的比特序列(由0和1组成),而不是十进制.十六进制或八进制数值.例如,十进制数9,用二进制表示则为1001.按 ...

  9. JS中关于比较运算符的问题(a===b)

    之前也会碰到a===b和a==b的表达式,但都没有仔细的看资料,今天看canvas有关的书中提到了,就mark一下: a == b    说明:a与b相等: a ===b  说明:a与b相同,并且类型 ...

随机推荐

  1. Nginx配置gzip.md

    参考 入门系列之在Nginx配置Gzip gzip是一种流行的数据压缩程序.您可以使用gzip压缩Nginx实时文件.这些文件在检索时由支持它的浏览器解压缩,好处是web服务器和浏览器之间传输的数据量 ...

  2. python 面向对象编程、获取对象信息

    面向对象与面向过程 参考链接:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0 ...

  3. Linux下mongoDB下载与安装

    原文连接:(http://www.studyshare.cn/blog/details/1168/0)一.下载 官网下载:点击下载 选择合适的版本 百度网盘下载:点击下载  提取码:rm12 此处提供 ...

  4. grid网格布局——色子布局

    一.基本概念 样式 含义 grid-area 定义名称 grid-auto-columns 定义列数 grid-auto-flow 定义单元格流动方向(想象水流的样子) grid-auto-rows ...

  5. 48.vue-awesome-swipe使用

    1.安装:npm install vue-awesome-swiper --save 2.局部引入: import "swiper/dist/css/swiper.css"; im ...

  6. Spring中基于注解的IOC(二):案例与总结

    2.Spring的IOC案例 创建maven项目 导入依赖 pom.xml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ...

  7. 字符串转换成float和double类型

    double strtod(const char *nptr, char **endptr); float strtof(const char *nptr, char **endptr); long ...

  8. MySQL 触发器学习-markdown->html 格式测试

    <!doctype html>触发器 figure:first-child { margin-top: -20px; } #write ol, #write ul { position: ...

  9. Ansible入门笔记(3)之Playbook

    目录 Ansible-playbook 1.1.什么是playbook? 1.2.playbook的核心组成 1.3.playbook的handlers.notify触发 1.4.playbook的变 ...

  10. Kubernetes学习之路(27)之k8s 1.15.2 部署

    目录 一.环境准备 二.软件安装 三.部署master节点 四.部署node节点 五.集群状态检测 一.环境准备 IP地址 节点角色 CPU Memory Hostname Docker versio ...