JS高程3-2:操作符

文章为《JavaScript高级程序设计》(第三版)笔记。

本小节包括:

  • 1.一元操作符
  • 2.位操作符
  • 3.布尔操作符
  • 4.乘性操作符
  • 5.加性操作符
  • 6.关系操作符
  • 7.相等操作符
  • 8.条件操作符
  • 9.赋值操作符
  • 10.逗号操作符

1.一元操作符

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

(1)递增和递减操作符

有两种类型:前置型和后置型

var num1 = 2;
var num2 = 2;
var num3 = --num1;  // 等于 1
var num4 = num2--;  // 等于 2
// num1 和 num2 都变成 1 

应用在其他类型值上时的规则:

  • 应用于一个包含有效数字字符的字符串时,先将其转换为数字值,再执行加减 1 的操作;
  • 应用于一个不包含有效数字字符串时,将变量的值设置为 NaN;
  • 应用于布尔值 false 时,先转换为 0 再执行加减 1 操作;
  • 应用于布尔值 true 时,先转换为 1 再执行加减 1 操作;
  • 应用于浮点数值时,执行加减 1 的操作;
  • 应用于对象时,先调用对象的 valueOf() 方法以取得一个可供操作的值。然后对该值应用前述规则。如果结果是 NaN,则在调用 toString() 方法后再应用前述规则。

示例:

var s1 = "2";
var s2 = "a";
var b = false;
var f = 1.1;
var o = {
  valueOf: function() {
    return -1;
  }
};

s1++;  // 值变为数值 3
s2++;  // 值变为 NaN
b++;   // 值变成数值 1
f--;   // 值变成 0.10000000000000009(由于浮点舍入错误所致)
o--;   // 值变成数值 -2

(2)一元加和减操作符

主要作用:用于基本的算数运算,用于转换数据类型

这里主要介绍下第二个功能——转换数据类型

在对非数值应用一元加减操作符时,该操作符会像 Number() 转型函数一样对这个值执行转换。

例子:

var s1 = "01";
var s2 = "1.1";
var s3 = "a";
var b = false;
var f = 1.1;
var o = {
  valueOf: function() {
    return -1;
  }
};

s1 = +s1;  // 值变为数值 1
s2 = +s2;  // 值变为数值 1.1
s3 = +s3;  // 值变为 NaN
b = +b;    // 值变为数值 0
o = +o;    // 值变为数值 -1

当应用与非数值时,一元减操作符遵循与一元加操作符相同的规则,最后再将得到的数值转换成负数。

2.位操作符

对于有符号的整数,32 位中的前 31 位用于表示整数的值。第 32 位用于表示数值的符号:0表示正数,1表示负数。

正数以二进制格式存储;负数同样以二进制码存储,但使用的格式是二进制补码。计算二进制补码的 3 个步骤:

  • 求得这个数值绝对值的二进制码(如,求-18的二进制补码,先求18的二进制码);
  • 求二进制反码,即将0替换成1,将1替换成0;
  • 得到的二进制反码加1。

(1)按位非(NOT)

按位非操作符由一个波浪线(~)表示,执行按位非的结果就是返回数值的反码。

var num1 = 25;
var num2 = ~num1;
num2; // -26
// 相当于 -num1 - 1

按位非操作的本质:操作数的负值减1。

(2)按位与(AND)

按位与操作符由一个和号字符(&)表示。只有在两个数值的对应位都是1时才返回1,任何一位是0,结果都是0。

(3)按位或(OR)

按位或操作符由一个竖线符号(|)表示。在有一个位是1的情况下就返回1,而只有在两个位都是0的情况下才返回0。

(4)按位异或(XOR)

按位异或操作符 由一个插入符号(^)表示。在两个数值对应位上只有一个1时才返回1,如果对应的两位都是1或都是0,则返回0.

(5)左移

左移操作符由两个小于号(<<)表示,这个操作符会将数值的所有位向左移动指定的位数。注意,左移不会影响操作数的符号位。

(6)有符号的的右移

有符号的右移操作符由两个大于号(>>)表示,这个操作符会将数值向右移动,但保留符号位(即正负号)。

(7)无符号右移

无符号右移操作符由3个大于号(>>>)表示,这个操作符会将数值的所有32位都向右移动。

3.布尔操作符

(1)逻辑非

逻辑非操作符由一个叹号(!)表示。同时使用两个逻辑非操作符,实际上就会模拟 Boolean() 转型函数的行为。

(2)逻辑与

逻辑与操作符由两个和号(&&)表示。如果第一个操作数是 false ,则不论第二个操作数是什么值,结果都不再可能是 true 了。

(3)逻辑或

逻辑或操作符由两个竖线符号(||)表示。如果第一个操作数的求值结果为 true,就不会对第二个操作数求值了。

4.乘性操作符

三个乘性操作符:乘法、除法和求模。

5.加性操作符

加法、减法。

6.关系操作符

小于、大于、小于等于和大于等于。

var res = '23' < '3';  // true

这里因为两个操作数都是字符串,比较的是字符编码("2"的编码是 50,"3"的编码是 51)。

var res = '23' < 3; // false

这时,"23"会被转成数值 23。

var res = 'a' < 3; // false,因为'a'被转换成了 NaN

任何操作数与 NaN 比较,结果都是 false。

7.相等操作符

相等和不相等——先转换再比较,全等和不全等——仅比较而不转换。

8.条件操作符

求最大值的例子:

var max = (num1 > num2) ? num1 : num2;

9.赋值操作符

简单的赋值操作符由等号表示(=)。

复合赋值操作符有:

  • 乘/赋值(*=)
  • 除/赋值(/=)
  • 模/赋值(%=)
  • 加/赋值(+=)
  • 减/赋值(-=)
  • 左移/赋值(<<=)
  • 有符号右移/赋值(>>=)
  • 无符号右移/赋值(>>>=)

10.逗号操作符

用在赋值时,逗号操作符总会返回表达式中的最后一项

var num = (5, 1, 4);  // num 为 4

猜你喜欢

转载自blog.csdn.net/qq_39025670/article/details/104932567
今日推荐