Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 11 additions & 11 deletions 1-js/02-first-steps/08-operators/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@

在本章中,我们将从简单的运算符开始,然后着重介绍 JavaScript 特有的方面,这些是在学校中学习的数学运算所没有涵盖的。

## 术语:“一元运算符”,“二元运算符”,“运算元
## 术语:“一元运算符”,“二元运算符”,“操作数

在正式开始前,我们先简单浏览一下常用术语。

- **运算元** —— 运算符应用的对象。比如说乘法运算 `5 * 2`,有两个运算元:左运算元 `5` 和右运算元 `2`。有时候人们也称其为“参数”而不是“运算元”。
- 如果一个运算符对应的只有一个运算元,那么它是 **一元运算符**。比如说一元负号运算符(unary negation)`-`,它的作用是对数字进行正负转换:
- **操作数** —— 运算符应用的对象。比如说乘法运算 `5 * 2`,有两个操作数:左操作数 `5` 和右操作数 `2`。有时候人们也称其为“参数”而不是“操作数”。
- 如果一个运算符对应的只有一个操作数,那么它是 **一元运算符**。比如说一元负号运算符(unary negation)`-`,它的作用是对数字进行正负转换:

```js run
let x = 1;
Expand All @@ -19,7 +19,7 @@
*/!*
alert( x ); // -1,一元负号运算符生效
```
- 如果一个运算符拥有两个运算元,那么它是 **二元运算符**。减号还存在二元运算符形式:
- 如果一个运算符拥有两个操作数,那么它是 **二元运算符**。减号还存在二元运算符形式:

```js run no-beautify
let x = 1, y = 3;
Expand Down Expand Up @@ -91,7 +91,7 @@ let s = "my" + "string";
alert(s); // mystring
```

注意:只要任意一个运算元是字符串,那么另一个运算元也将被转化为字符串
注意:只要任意一个操作数是字符串,那么另一个操作数也将被转化为字符串

举个例子:

Expand All @@ -100,7 +100,7 @@ alert( '1' + 2 ); // "12"
alert( 2 + '1' ); // "21"
```

你看,第一个运算元和第二个运算元,哪个是字符串并不重要。
你看,第一个操作数和第二个操作数,哪个是字符串并不重要。

下面是一个更复杂的例子:

Expand All @@ -115,20 +115,20 @@ alert('1' + 2 + 2); // "122",不是 "14"
```
这里,第一个操作数是一个字符串,所以编译器将其他两个操作数也视为了字符串。`2` 被与 `'1'` 连接到了一起,也就是像 `'1' + 2 = "12"` 然后 `"12" + 2 = "122"` 这样。

二元 `+` 是唯一一个以这种方式支持字符串的运算符。其他算术运算符只对数字起作用,并且总是将其运算元转换为数字
二元 `+` 是唯一一个以这种方式支持字符串的运算符。其他算术运算符只对数字起作用,并且总是将其操作数转换为数字

下面是减法和除法运算的示例:

```js run
alert( 6 - '2' ); // 4,将 '2' 转换为数字
alert( '6' / '2' ); // 3,将两个运算元都转换为数字
alert( '6' / '2' ); // 3,将两个操作数都转换为数字
```

## 数字转化,一元运算符 +

加号 `+` 有两种形式。一种是上面我们刚刚讨论的二元运算符,还有一种是一元运算符。

一元运算符加号,或者说,加号 `+` 应用于单个值,对数字没有任何作用。但是如果运算元不是数字,加号 `+` 则会将其转化为数字。
一元运算符加号,或者说,加号 `+` 应用于单个值,对数字没有任何作用。但是如果操作数不是数字,加号 `+` 则会将其转化为数字。

例如:

Expand Down Expand Up @@ -177,7 +177,7 @@ alert( +apples + +oranges ); // 5

从一个数学家的视角来看,大量的加号可能很奇怪。但是从一个程序员的视角,没什么好奇怪的:一元运算符加号首先起作用,它们将字符串转为数字,然后二元运算符加号对它们进行求和。

为什么一元运算符先于二元运算符作用于运算元?接下去我们将讨论到,这是由于它们拥有 **更高的优先级**。
为什么一元运算符先于二元运算符作用于操作数?接下去我们将讨论到,这是由于它们拥有 **更高的优先级**。

## 运算符优先级

Expand Down Expand Up @@ -423,7 +423,7 @@ counter++;

## 位运算符

位运算符把运算元当做 32 位整数,并在它们的二进制表现形式上操作。
位运算符把操作数当做 32 位整数,并在它们的二进制表现形式上操作。

这些运算符不是 JavaScript 特有的。大部分的编程语言都支持这些运算符。

Expand Down