当心JavaScript奇葩的逗号表达式

看看下面的代码输出什么?

  let a = 2;
    switch (a) {
        case (3, 2, 5):
            console.log(1);
            break
        case (2, 3, 4):
            console.log(2);
            break
        case (3, 2):
            console.log(3);
            break
        default:
            console.log(4);
            break;
    }

输出为: 3 

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

上面代码中第一个 case 的返回值为5,第二个为4 , 与 变量a的值都不相等,第三个为2,与a相等,所以最后输出 3 。

再看一例子:

        let i, j;
        let result = 0;
        for (i = 0, j = 0; i < 3, j < 7; i++, j++) {
            result = i + j
        }
        console.log(result)

输出为:12

解析:根据逗号操作符对它的每个操作数求值(从左到右),并返回最后一个操作数的值的特性可知逗号表达式 “i<3,j<7”,其实质上等于“j<7”,所以结果是 12

原文地址:https://www.cnblogs.com/lwming/p/11167384.html

时间: 2024-11-04 09:15:10

当心JavaScript奇葩的逗号表达式的相关文章

JavaScript 逗号表达式

逗号表达式的一般形式是:表达式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 /*整个表达式为逗号表达式,它的值为

JavaScript中的逗号运算符

JavaScript中的逗号运算符(,)是顺序执行两个表达式. expression1, expression2 其中,expression1是任何表达式,expression2是任何表达式. 逗号运算符(,)导致按从

JavaScript中的函数表达式

在JavaScript中,函数是个非常重要的对象,函数通常有三种表现形式:函数声明,函数表达式和函数构造器创建的函数. 本文中主要看看函数表达式及其相关的知识点. 函数表达式 首先,看看函数表达式的表现形式,函数表达式(Function Expression, FE)有下面四个特点: 在代码中须出现在表达式的位置 有可选的函数名称 不会影响变量对象(VO) 在代码执行阶段创建 下面就通过一些例子来看看函数表达式的这四个特点. FE特点分析 例子一:在下面代码中,"add"是一个函数对象

关于宏和逗号表达式

宏是C编译系统的预处理,何谓“预”?即是正式工作开始之前的准备工作.所以宏替换是在对程序编译之前进行的~也就是直接将宏定义的字符,转换成后面的表达式. 逗号表达式:逗号运算符,优先级别最低,它将两式联接起来,可连续执行 代码:直接对文件输出1-1000的数字 #include <stdio.h> #define B P,P,P,P,P,P,P,P,P,P #define P L,L,L,L,L,L,L,L,L,L #define L I,I,I,I,I,I,I,I,I,I,N #define

逗号表达式

/** 目的:逗号表达式的例子时间:2015年7月11日23:11:11 */#include <stdio.h> int main(void){ int i; int j = 2; i = (j++, ++j, j + 2, j - 3); printf("i = %d\n",i); printf("j = %d\n",j); return 0;} /** 在VC++6.0中运行结果为:------------------------ i = 1j =

第18课 三目运算符和逗号表达式

1. 三目运算符 (1)三目运算符(a?b:c)可以作为逻辑运算的载体 (2)规则:当a的值为真时,返回变量b的值(而不是变量本身):否则返回c的值. [实例分析]三目运算符初探 #include <stdio.h> int main() { int a = 1; int b = 2; int c = 0; c = a < b ? a : b; //(a<b)?a:b; //以下代码试图根据条件有选择地给a或b变量赋值.但这样的 //代码是错的,因为三目运算符的返回值是a或b变量的

JavaScript中的函数表达式及递归

在JavaScript中,函数是个非常重要的对象,函数通常有三种表现形式:函数声明,函数表达式和函数构造器创建的函数. 本文中主要看看函数表达式及其相关的知识点. 函数表达式 首先,看看函数表达式的表现形式,函数表达式(Function Expression, FE)有下面四个特点: 在代码中须出现在表达式的位置 有可选的函数名称 不会影响变量对象(VO) 在代码执行阶段创建 下面就通过一些例子来看看函数表达式的这四个特点. 特点分析 例子一:在下面代码中,"add"是一个函数对象,&

C++逗号表达式

转自:https://zhidao.baidu.com/question/106961628.html 逗号表达式的语法为: 表达式1,表达式2,...表达式n C++顺序计算表达式1,表达式2,--,表达式n的值.例如: int a,b,c: a=l,b=a+2, c=b+3: 由于按顺序求值, 所以能够保证b一定在a赋值之后, c一定在b赋值之后.该逗号表 达式可以用下面3个有序的赋值语句来表示: a=1: b=a+2: c=b+3: 逗号表达式是有值的,这一点是语句所不能代替的.逗号表达式

C-1 简单数据类型转换, scanf缓冲区, 逗号表达式

关于类型转换: 1.int 如果是超出了int的范围,会溢出 如果超出了太多,报错 如果是一个小数,只会截取整数部分, 不会四舍五入 2.float 如果是一个double类型的小数,double→float 如果是一个int类型的整数,int→float 3.double 如果是一个float,float→double 如果是一个int,int→double 4.char 自动转换的顺序是: char → int → float → double scanf缓冲区问题 在接收输入的时候,sca