递增递减操作符
递增和递减操作符直接照搬自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