js中的逗号运算符
逗号运算符
逗号运算符是二元运算符,它的操作数可以是任意类型。它首先计算左操作数,然后计算右操作数,最后返回右操作数的值,用逗号运算符可以在一条语句中执行多个运算
作用:
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=?
结果推测:
- k=10
解析:
因为 i=6 时,不满足条件,跳出循环。(关系间为&&关系) - k=12
基础原因考虑到 1,然后推测 k=i+j 是引用函数中的 i、j 所以当 log(k)的时候,应该输出 i、j 循坏结束后的值即 i=j=6(闭包后遗症) - k=18
因为 i < 6, j < 10 是或的关系,需要两者同时值为 false - 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中的逗号运算符的更多相关文章
- js中的等值运算符(抽象相等==与严格相等===的区别)
js中的等值运算符 js中的相等分为抽象相等和严格相等,他们有什么区别呢. 在说具体算法前,先提下JS数据类型,JS数据类型分为6类:Undefined Null String Number Bool ...
- JavaScript中的逗号运算符
JavaScript逗号运算符 阅读本文的前提,明确表达式.短语.运算符.运算数这几个概念. 所谓表达式,就是一个JavaScript的“短语”,JavaScript解释器可以计算它,从而生成一个值 ...
- JS中的各类运算符
2020-04-15 JS中的各类运算符 // 假设有如下代码,那么a(10)的返回结果是?( ) function a(a) { a^=(1<<4)-1; return a; } // ...
- C语言中关于逗号运算符的理解
在C语言中运算符有很多,包括算数运算符.关系运算符.赋值运算符.位运算符.逻辑运算符.三目运算符.sizeof运算符.逗号运算符等等,那今天我们就重点来给大家讨论一下关于逗号运算符的一些运算规则. 首 ...
- js中的instanceof运算符
概述 instanceof运算符用来判断一个构造函数的prototype属性所指向的对象是否存在另外一个要检测对象的原型链上 语法 obj instanceof Object;//true 实例obj ...
- js中对于逗号的运算符!
先展示一个例子! var f = (function f() { return '1'; } , function g(){ return 1; } )(); console.log(typeof f ...
- JS中的加号+运算符详解
加号+运算符 在 JavaScript 中,加法的规则其实很简单,只有两种情况: 把数字和数字相加 把字符串和字符串相加 所有其他类型的值都会被自动转换成这两种类型的值. 为了能够弄明白这种隐式转换是 ...
- js中的位运算符 ,按位操作符
按位操作符(Bitwise operators) 将其操作数(operands)当作32位的比特序列(由0和1组成),而不是十进制.十六进制或八进制数值.例如,十进制数9,用二进制表示则为1001.按 ...
- JS中关于比较运算符的问题(a===b)
之前也会碰到a===b和a==b的表达式,但都没有仔细的看资料,今天看canvas有关的书中提到了,就mark一下: a == b 说明:a与b相等: a ===b 说明:a与b相同,并且类型 ...
随机推荐
- 【转】2019年7月份,阿里最新Java高频面试真题汇总
技术一面(23问)技术二面(3大块)JAVA开发技术面试中可能问到的问题(17问)JAVA方向技术考察点(33快)项目实战(7大块)必会知识(48点)面试小技巧注意事项1. 阿里技术一面 Java I ...
- C#读写修改设置调整UVC摄像头画面-清晰度
有时,我们需要在C#代码中对摄像头的清晰度进行读和写,并立即生效.如何实现呢? 建立基于SharpCamera的项目 首先,请根据之前的一篇博文 点击这里 中的说明,建立基于SharpCamera的摄 ...
- asp.net 报错 SAP 报错 试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)
“/”应用程序中的服务器错误. 试图加载格式不正确的程序. (异常来自 HRESULT:0x8007000B) 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该 ...
- 理解 BLS 签名算法
理解 BLS 签名算法 来源 https://medium.com/cryptoadvance/bls-signatures-better-than-schnorr-5a7fe30ea716 原文标题 ...
- keras学习入门一
基本概念 1. 张量 tensor 所有的数据类型都可以看成是张量,可以看成是向量,矩阵在推广 张量的阶,有时候也叫维度,或是轴(axis) 0阶张量如 [] ,5 也叫做标量 1阶张量 如 [ 1, ...
- MAC电脑下Appium + python3 + robotframework ios的真机测试环境搭建
本人的环境搭建前的准备,MAC电脑一台(macOS Mojave 10.14.0及以上),Xcode 10.0及以上 ,自己注册的一个Apple ID 账户,必须你的电脑能连接互联网,最好不要用公 ...
- Android中控件AutoCompleteTextView的使用方法和一些属性
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...
- .NET编译问题汇总
1.Your project.json doesn't list 'win' as a targeted runtime. You should add '"win": { }' ...
- AR自动开票主程序导入发票的时候,出现错误提示''不能获取汇款地址''
问题:AR自动开票主程序,出现错误不能获取汇款地址 解决:AR>设置-打印-汇入地址,汇入地址要增加此客户地点对应的国家:
- Java 堆内存 新生代 (转)
Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象.在 Java 中,堆被划分成两个不同的区域:新生代 ( Young ).老年代 ( Old ).新生代 ( You ...