JavaScript一元操作符详解


只能操作一个值的操作符叫做一元操作符。

  • 递增和递减操作符

递增和递减操作符有前置型后置型两个版本。从字面上看就识货,前置型应该位于要操作的变量之前。而后置型就是位于要操作的变量之后。如下例子:

var age = 24;
++age; // 25

等同于

var age = 24;
age = age + 1;

执行前置递减操作的方法也类似,结果会将数值减去1。使用前置递减时,要把两个减号放在相应的变量前边,如:

var age = 24;
--age; // 23

执行前置递增和递减操作时,变量的值都是在语句被求值以前改变的。
如下例:

var age = 24;
var endAge = --age + 2;
alert(age); // 23
alert(endAge); // 25

这个例子中,变量endAge的初始值等于变量age的值前置递减之后加2。因为先执行了减法操作,age的值变成了23,所以之后再加上2的结果就为25。
前置递增和递减操作与执行语句的优先级相等,执行顺序为从左到右求值。
如下例:

var num1 = 2;
var num2 = 20;
var num3 = --num1 + num2; // 21
var num4 = num1 + num2; // 21

后置型递增和递减操作符的语法不变,只不过要放在变量的后面。后置递增和递减前置递增和递减有一个非常重要的区别,即递增和递减操作是在包含它们的语句被求值之后才执行的
如下例:

var age = 24;
age++; // 25

当递增是这条语句的唯一操作时,结果并不会有所改变。但是,当语句中包含的还有其他的操作时,上述区别就会非常明显。

var num1 = 2;
var num2 = 20;
var num3 = num1-- + num2; // 22
var num4 = num1 + num2; // 21

这时就可以看出明显的差别,根源在于这里计算num3时使用了num1的原始值 “2” 完成了计算,而num4则是使用了递减后的值 “1” 。
所有这 4 个操作符对任何值都适用,也就是它们不仅适用于整数,还可以用于字符串、布尔值、浮点数值和对象。在应用于不同的值时,递增和递减操作符遵循下列规则。
– 在应用于一个包含有效数字字符的字符串时,先将其转换为数字值,再执行加减 1 的操作。字符串变量变成数值变量。
– 在应用于一个不包含有效数字字符的字符串时,将变量的值设置为 NaN。字符串变量变成数值变量。
– 在应用于布尔值 false 时,先将其转换为 0 再执行加减 1 的操作。布尔值变量变成数值变量。
– 在应用于布尔值 true 时,先将其转换为 1 再执行加减 1 的操作。布尔值变量变成数值变量。
– 在应用于浮点数值时,执行加减 1 的操作。
– 在应用于对象时,先调用对象的 valueOf()方法以取得一个可供操作的值。然后对该值应用前述规则。如果结果是 NaN,则在调用 toString()方法后再应用前述规则。对象变量变成数值变量。
如下例:

var a = "2";
var b = "z";
var c = false;
var d = 1.1;
var e = {
  valueOf: function() {
    return -1;
  }
};
a++; // 3
b++; // NaN
c++; // 1
d--; // 0.10000000000000009(由于浮点舍入错误所致)
e--; // -2
  • 一元加和减操作符

一元加和减操作符,这两个 ECMAScript 操作符的作用与数学书上讲的完全一样。一元加操作符以一个加号表示,放在数值前面,对数值不会产生任何影响。
如下例:

var num = 24;
num = +num; // 24

在对非数值应用一元加操作符时,该操作符会像 Number()转型函数一样对这个值执行转换。也就是说,布尔值 false 和 true 将被转换为 0 和 1,字符串值会被按照一组特殊的规则进行解析,而对象是先调用它们的 valueOf()和(或)toString()方法,再转换得到的值。
如下例:

 

var a = "01";
var b = "1.1";
var c = "z";
var d = false;
var e = 1.1;
var f = {
  valueOf: function() {
    return -1;
  }
};
a = +a; // 1
b = +b; // 1.1
c = +c; // NaN
d = +d; // 0
e = +e; // 1.1
f = +f; // -1

一元减操作符主要用于表示负数。

 

var a = "01";
var b = "1.1";
var c = "z";
var d = false;
var e = 1.1;
var f = {
  valueOf: function() {
    return -1;
  }
};
a = -a; // -1
b = -b; // -1.1
c = -c; // NaN
d = -d; // 0
e = -e; // -1.1
f = -f; // 1

> **学习随笔**

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/278732.html

(0)
上一篇 2022年8月3日
下一篇 2022年8月3日

相关推荐

发表回复

登录后才能评论