Skip to main content

一元操作符

只操作一个值的操作符叫做 一元操作符, 一元操作符ECMAScript 中最简单的操作符

递增/递减操作符

递增和递减操作符分为前缀版后缀版两个版本。

前缀版递增

前缀版: 就是位于操作的变量前头 前缀版递增和递减在语句被求值之前被改变

let age = 29;
++age;

// 实际上等于如下表达式
// let age = 29
// age = age + 1;
let age = 29;
--age;

// 实际上等于如下表达式
// let age = 29
// age = age - 1;

描述

无论是前缀递增还是前缀递减操作符,变量的值都会在语句被求值之前被改变

在这个例子中,变量anotherageage 减一后的值再加 2 进行初始化。

因为递减操作先发生所以 age 的值是 28 anotherage的值是 30

let age = 29;
let anotherage = --age + 2;

console.log(age); //28
console.log(anotherage); //30
let age = 29;
age = age - 1;

后缀版递增

后缀版: 就是位于要操作的变量后头。后缀版递增和递减在语句被求值后才发生

let age = 29;
age++;
let age = 29;
age--;

转换规则

上述的四个操作符可以用作任何值,意思是不限于整数--字符串,布尔值,浮点值,甚至对象都可以。递增和递减操作符遵循如下规则。

  • 对于字符串,如果是有效的数值形式,则转换为数值在应用改变,变量类型从字符串变成数值
  • 对于字符串,如果不是有效的数值形式,则将变量的值设置为 NaN。变量类型从字符串变成一个数值
  • 对于布尔值,如果是 false 则转换成 0 在应用改变。变量类型从布尔值变成数值
  • 对于布尔值,如果是 false 则转换成 1` 在应用改变。变量类型从布尔值变成数值
  • 如果是对象,则调用它本身的valueOf()方法取得可以操作的值。对得到的值应用上述规则。
let s1 = "2";
let s2 = "z";
let b = false;
let f = 1.1;
let o = {
valueOf() {
return -1;
},
};

++s1;
s2++;
b++;
f--;
o--;

console.log(s1); //3;
console.log(s2); //NaN;
console.log(b); //1;
console.log(f); //0.1000000000009;
console.log(o); // -2

一元加和减

一元加和减操作符 对大多数开发者来说并不陌生,他们在 ECMAScript 中跟在数学中的用途一样。

一元加

一元加有一个加号(+)表示,放在变量前面,对数值没有任何影响

let num = 25;
num = +num;
console.log(num); //25

如果将一元加应用到非数值,则会执行与使用 Number()转型函数一样的类型转换

  • 布尔值 truefalse转换为 01
  • 字符串根据特殊规则进行解析
  • 对象会调用他们的 valueOf()和/或 toString()

示例

let s1 = "01";
let s2 = "1.1";
let s3 = "z";
let b = false;
let f = 1.1;
let o = {
valueOf() {
return -1;
},
};

s1 = +s1;
s2 = +s2;
s3 = +s3;
b = +b;
f = +f;
o = +o;

console.log(s1); //1;
console.log(s2); //1.1;
console.log(s3); //NaN;
console.log(b); //0;
console.log(f); //1.1;
console.log(o); // -1

一元减

一元减有一个减号(-)表示,放在变量前面,主要用于把数值变为负数。

let num = 25;
num = -num;
console.log(num); //-25

如果将一元减应用到非数值,一元减会遵循和一元加同样的规则,先对他们进行转换,然后在取负值

示例

let s1 = "01";
let s2 = "1.1";
let s3 = "z";
let b = false;
let f = 1.1;
let o = {
valueOf() {
return -1;
},
};

s1 = -s1;
s2 = -s2;
s3 = -s3;
b = -b;
f = -f;
o = -o;

console.log(s1); //-1;
console.log(s2); //-1.1;
console.log(s3); //NaN;
console.log(b); //0;
console.log(f); //-1.1;
console.log(o); // 1