一元操作符
只操作一个值的操作符叫做 一元操作符
, 一元操作符
是 ECMAScript
中最简单的操作符
递增/递减操作符
递增和递减操作符分为前缀版
和后缀版
两个版本。
前缀版递增
前缀版: 就是位于操作的变量前头 前缀版递增和递减在语句被求值之前被改变
let age = 29;
++age;
// 实际上等于如下表达式
// let age = 29
// age = age + 1;
let age = 29;
--age;
// 实际上等于如下表达式
// let age = 29
// age = age - 1;
描述
无论是前缀递增
还是前缀递减
操作符,变量的值都会在语句被求值之前被改变
在这个例子中,变量anotherage
以 age
减一后的值再加 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()转型函数一样的类型转换
- 布尔值
true
和false
转换为0
和1
- 字符串根据特殊规则进行解析
- 对象会调用他们的
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