跳至正文

JavaScript入门教程笔记(10)-运算符

1 概述

JavaScript 提供了10种算术运算符,用来完成基本的算术运算。

  • 加法运算符:x + y
  • 减法运算符: x - y
  • 乘法运算符: x * y
  • 除法运算符:x / y
  • 指数运算符:x ** y
  • 余数运算符:x % y
  • 自增运算符:++ x 或者 x ++
  • 自减运算符:--x 或者 x--
  • 数值运算符: +x
  • 负数值运算符:-x

这些运算符的使用方法和其它语言的差不多,本文只介绍几处有用的重点。

2 加法运算符

加法运算符(+)一般用来求两个数值的和。如果是两个字符串相加,将会把两个字符串连接在一起。

1 + 2 // 3
true + true // 2
1 + 'a' // "1a"
'a' + 'bc' // "abc"

加法运算符到底是执行相加,还是执行连接,是根据不同的运算子在运行时决定的。

'1' + 2 + 3 // "123"
1 + 2 + '3' // '33'

上面代码中,由于从左到右的运算次序,产生不同的执行结果。

3 指数运算符

指数运算符(**)完成指数运算,前一个运算子是底数,后一个运算子是指数。

2 ** 4 // 16
// 相当于 2 ** (3 ** 2)
2 ** 3 ** 2 // 512

注意,指数运算符是右结合,而不是左结合。

4 或运算符(||)

或运算符常用于为一个变量设置默认值。

function saveText(text) {
  text = text || '';
  // ...
}

// 或者写成
saveText(this.text || '')

上面代码表示,如果函数调用时,没有提供参数,则该参数默认设置为空字符串。

5 位运算符

前面介绍过,JavaScript内部的数值都是以64位浮点数的形式储存,但是做位运算的时候,是以32位带符号的整数进行运算的,并且返回值也是一个32位带符号的整数。

二进制或运算(|)

i = i | 0;

上面这行代码,就是将i(不管是整数或小数)转为32位整数。

利用这个特性,可以写出一个函数,将任意数值转为32位整数。

function toInt32(x) {
  return x | 0;
}

toInt32(1.001) // 1
toInt32(-9.999) // -9

上面这个函数将任意值与0进行一次或运算,这个位运算会自动将一个值转为32位整数。

二进制否运算符(~)

否运算符(~)将每个二进制位都变为相反值(0变为1,1变为0)。

对一个整数连续两次二进制否运算,得到它自身。

~~3 // 3

因为所有的位运算都只对整数有效。二进制否运算遇到小数时,也会将小数部分舍去,只保留整数部分。所以,对一个小数连续进行两次二进制否运算,能达到取整效果。

~~2.9 // 2
~~47.11 // 47
~~1.9999 // 1
~~3 // 3

使用二进制否运算取整,是所有取整方法中最快的一种。

异或运算符(^)

异或运算(^)在两个二进制位不同时返回1,相同时返回0。

0 ^ 3 // 3

上面表达式中,0(二进制00)与3(二进制11)进行异或运算,它们每一个二进制位都不同,所以得到11(即3)。

“异或运算”有一个特殊运用,连续对两个数a和b进行三次异或运算,a^=b; b^=a; a^=b;,可以互换它们的值。这意味着,使用“异或运算”可以在不引入临时变量的前提下,互换两个变量的值。

var a = 10;
var b = 99;

a ^= b, b ^= a, a ^= b;

a // 99
b // 10

这是互换两个变量的值的最快方法。

异或运算也可以用来取整。

9.99 ^ 0 // 9
标签:

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注