JS自增和自减面试那些事儿

2,225 阅读2分钟

自增和自减

基本功能

一元(目)运算符 --> 只能对一个操作数进行操作。 自增和自减只能针对变量操作,字面量不行。

++:将某个变量的值自增1 --:将某个变量的值自减1

        var a = 1;
        console.log(a++); // 输出的是 a++这个表达式的值,并不是a的值。 a++表达式的值为a自增之前的值 1
        a--; // a = a -1 = 2 - 1 = 1 
        console.log(a); // 1

细节

自增自减表达式

x++:将变量x自增1,得到的表达式的值是自增之前的值 ++x:将变量x自增1,得到的表达式的值是自增之后的值 x--:将变量x自减1,得到的表达式的值是自减之前的值 --x:将变量x自减1,得到的表达式的值是自减之后的值

        var x = 1;
        x++;
        console.log(x); // 2
        console.log(++x); // 3 输出是++x表达式的值
        console.log(x); //3
        var x = 1;
        var y = ++x + 1;
        console.log(y); // 3
        console.log(x); // 2

优先级

从高到低依次是:

  1. ++ -- 他们的优先级是最高的,不论放前还是放后
  2. * / %
  3. + -
  4. = 赋值符号的优先级最低

如果考虑优先级,不考虑真正进行运算规则,那么部分题是可以做的,但是遇到部分题答案就不尽人意了。我们来看一些:

        var x = 1;
        var y = x + 1 * x;
        console.log(y); // 2

如果配合上 ++ -- ,那么按照优先级运算 那么问题就来了

        var x = 1;
        var y = x + x++ * x + 3;   
        console.log(y); // 根据优先级计算那么理应该输出7, 实际输出是6

这是为什么呢? 那么就需要注意运算中 这些细节了。 计算时要打开自己的记事本,慢慢来算。

优先级的运算细节:

  1. 从左到右依次查看
  2. 如果遇到操作数,将数据的值直接取出
  3. 如果遇到相邻的两个运算符,并且左边的运算符优先级大于等于右边的运算符,则直接运行左边的运算符。
  4. 计算后在从左到右看,跟随上面是顺序。

有了这个顺序和细节,任何问题都可以解决了。 我们来一道比较难的。

        var x = 1;
        var y = x + ++x + 3 * (x = ++x + x + x++ + 1) + x++ + 3;
        console.log(y); // 46
// 在()运算时,不是直接上来就是运算()里面的,还是按照运算顺序来计算,运算到()的时候,在算()里面的。
// x = xxx + xxx... 输出是表达式的值,类似console.log(x = 1),输出1,最终x的值赋值也是1

结束

大概也就这么多吧,欢迎大家指正补充。 码字不易,希望点赞关注转发3连。 最后祝各位程序员永不脱发!

本文使用 mdnice 排版