++i与i++的区别—递增递减操作符

递增递减操作符

递增和递减操作符直接照搬自C语言,即(++/–)但有两个版本:前缀版和后缀版。顾名思义,前缀版就是位于要操作的变量前头,后缀版就是位于要操作的变量后头。
这是一个很容易混淆的点,今天就简单写一下
对于递增/递减操作符可拆解为:

let age = 29 
++age;// age = 30
// ++age; 可以变为 age = age + 1 ; 递减操作符同理

前缀版

前缀版操作符,即++i/--i, 特点:变量的值都会在语句被求值之前改变。
例:

let num1 = 2; 
let num2 = 20; 
let num3 = --num1 + num2;  //此时 num1 改变为 1 再求值 为21
let num4 = num1 + num2; 
console.log(num3); // 21 
console.log(num4); // 21

后缀版

前缀版操作符,即i++/i-- 与前缀操作符相反:后缀版递增和递减在语句被求值后才发生。

let num1 = 2; 
let num2 = 20; 
let num3 = num1-- + num2; //此时运算时 num1值还未改变 2+20 运算完成之后num1改变为1
let num4 = num1 + num2; 
console.log(num3); // 22 
console.log(num4); // 21

作用类型

这4个操作符(前/后缀递增/减操作符)可以作用于任何值,意思是不限于整数——字符串、布尔值、浮点值,甚至对象都可以。递增和递减操作符遵循如下规则。

  • 对于字符串,如果是有效的数值形式,则转换为数值再应用改变。变量类型从字符串变成数值。
  • 对于字符串,如果不是有效的数值形式,则将变量的值设置为NaN。变量类型从字符串变成数值。
  • 对于布尔值,如果是false,则转换为0再应用改变。变量类型从布尔值变成数值。
  • 对于布尔值,如果是true,则转换为1再应用改变。变量类型 从布尔值变成数值。
  • 对于浮点值,加1或减1。
  • 如果是对象,则调用其valueOf()方法取得可以操作的值。对得到的值应用上述规则。如果是NaN,则调用toString()并再次应用其他规则。变量类型从对象变成数值。
let s1 = "2"; 
let s2 = "z"; 
let b = false; 
let f = 1.1; 
let o = { 
  valueOf() { 
    return -1; 
  } 
}; 
s1++; // 值变成数值3 
s2++; // 值变成NaN 
b++; // 值变成数值1 
f--; // 值变成0.10000000000000009(因为浮点数不精确) 
o--; // 值变成-2

原文链接:https://juejin.cn/post/7353435420984360970 作者:guoxk

(0)
上一篇 2024年4月3日 下午4:43
下一篇 2024年4月3日 下午4:54

相关推荐

发表回复

登录后才能评论