1
0
mirror of https://github.com/apachecn/eloquent-js-3e-zh.git synced 2025-05-23 20:02:20 +00:00
This commit is contained in:
wizardforcel 2018-04-29 18:30:49 +08:00
parent deb946d9c1
commit 0f0a0bca26

46
1.md
View File

@ -43,7 +43,7 @@
数字(`Number`)类型的值即数字值。在 JavaScript 中写成如下形式: 数字(`Number`)类型的值即数字值。在 JavaScript 中写成如下形式:
``` ```js
13 13
``` ```
@ -57,13 +57,13 @@ JavaScript使用固定数量的位64 位)来存储单个数字值。 你可
使用小数点来表示分数。 使用小数点来表示分数。
``` ```js
9.81 9.81
``` ```
对于非常大或非常小的数字,你也可以通过输入`e`(表示指数),后面跟着指数来使用科学记数法: 对于非常大或非常小的数字,你也可以通过输入`e`(表示指数),后面跟着指数来使用科学记数法:
``` ```js
2.998e8 2.998e8
``` ```
@ -75,7 +75,7 @@ JavaScript使用固定数量的位64 位)来存储单个数字值。 你可
与数字密切相关的就是算术。比如加法或者乘法之类的算术运算会使用两个数值并产生一个新的数字。JavaScript 中的算术运算如下所示: 与数字密切相关的就是算术。比如加法或者乘法之类的算术运算会使用两个数值并产生一个新的数字。JavaScript 中的算术运算如下所示:
``` ```js
100 + 4 * 11 100 + 4 * 11
``` ```
@ -83,7 +83,7 @@ JavaScript使用固定数量的位64 位)来存储单个数字值。 你可
但是这个例子的意思是“将 4 和 100 相加,并将结果乘 11”还是是在加法之前计算乘法 正如你可能猜到的那样,乘法首先计算。 但是和数学一样,你可以通过将加法包在圆括号中来改变它: 但是这个例子的意思是“将 4 和 100 相加,并将结果乘 11”还是是在加法之前计算乘法 正如你可能猜到的那样,乘法首先计算。 但是和数学一样,你可以通过将加法包在圆括号中来改变它:
``` ```js
(100 + 4) * 11 (100 + 4) * 11
``` ```
@ -107,7 +107,7 @@ JavaScript使用固定数量的位64 位)来存储单个数字值。 你可
下一个基本数据类型是字符串(`String`)。 字符串用于表示文本。 它们是用引号括起来的: 下一个基本数据类型是字符串(`String`)。 字符串用于表示文本。 它们是用引号括起来的:
``` ```js
`Down on the sea` `Down on the sea`
"Lie on the ocean" "Lie on the ocean"
'Float on the ocean' 'Float on the ocean'
@ -119,7 +119,7 @@ JavaScript使用固定数量的位64 位)来存储单个数字值。 你可
若要将这些字符存入字符串,需要使用下列规则:当反斜杠(`\`)出现在引号之间的文本中时,表示紧跟在其后的字符具有特殊含义,我们将其称之为转义符。当引号紧跟在反斜杠后时,并不意味着字符串结束,而表示这个引号是字符串的一部分。当字符`n`出现在反斜杠后时JavaScript 将其解释成换行符。以此类推,`\t`表示制表符,我们来看看下面这个字符串: 若要将这些字符存入字符串,需要使用下列规则:当反斜杠(`\`)出现在引号之间的文本中时,表示紧跟在其后的字符具有特殊含义,我们将其称之为转义符。当引号紧跟在反斜杠后时,并不意味着字符串结束,而表示这个引号是字符串的一部分。当字符`n`出现在反斜杠后时JavaScript 将其解释成换行符。以此类推,`\t`表示制表符,我们来看看下面这个字符串:
``` ```js
"This is the first line\nAnd this is the second" "This is the first line\nAnd this is the second"
``` ```
@ -132,7 +132,7 @@ And this is the second
当然,在某些情况下,你希望字符串中的反斜杠只是反斜杠,而不是特殊代码。 如果两个反斜杠写在一起,它们将合并,并且只有一个将留在结果字符串值中。 这就是字符串“`A newline character is written like "\n".`”的表示方式: 当然,在某些情况下,你希望字符串中的反斜杠只是反斜杠,而不是特殊代码。 如果两个反斜杠写在一起,它们将合并,并且只有一个将留在结果字符串值中。 这就是字符串“`A newline character is written like "\n".`”的表示方式:
``` ```js
"A newline character is written like \"\\n\"." "A newline character is written like \"\\n\"."
``` ```
@ -142,7 +142,7 @@ And this is the second
我们不能将除法,乘法或减法运算符用于字符串,但是`+`运算符却可以。这种情况下,运算符并不表示加法,而是连接操作:将两个字符串连接到一起。以下语句可以产生字符串`"concatenate"` 我们不能将除法,乘法或减法运算符用于字符串,但是`+`运算符却可以。这种情况下,运算符并不表示加法,而是连接操作:将两个字符串连接到一起。以下语句可以产生字符串`"concatenate"`
``` ```js
"con" + "cat" + "e" + "nate" "con" + "cat" + "e" + "nate"
``` ```
@ -150,7 +150,7 @@ And this is the second
用单引号或双引号编写的字符串的行为非常相似 - 唯一的区别是需要在其中转义哪种类型的引号。 反引号字符串,通常称为模板字面值,可以实现更多的技巧。 除了能够跨越行之外,它们还可以嵌入其他值。 用单引号或双引号编写的字符串的行为非常相似 - 唯一的区别是需要在其中转义哪种类型的引号。 反引号字符串,通常称为模板字面值,可以实现更多的技巧。 除了能够跨越行之外,它们还可以嵌入其他值。
``` ```js
`half of 100 is ${100 / 2}` `half of 100 is ${100 / 2}`
``` ```
@ -160,7 +160,7 @@ And this is the second
并非所有的运算符都是用符号来表示,还有一些运算符是用单词表示的。比如`typeof`运算符,会产生一个字符串的值,内容是给定值的具体类型。 并非所有的运算符都是用符号来表示,还有一些运算符是用单词表示的。比如`typeof`运算符,会产生一个字符串的值,内容是给定值的具体类型。
``` ```js
console.log(typeof 4.5) console.log(typeof 4.5)
// → number // → number
console.log(typeof "x") console.log(typeof "x")
@ -171,7 +171,7 @@ console.log(typeof "x")
我们所见过的绝大多数运算符都使用两个值进行操作,而`typeof`仅接受一个值进行操作。使用两个值的运算符称为二元运算符,而使用一个值的则称为一元运算符。减号运算符既可用作一元运算符,也可用作二元运算符。 我们所见过的绝大多数运算符都使用两个值进行操作,而`typeof`仅接受一个值进行操作。使用两个值的运算符称为二元运算符,而使用一个值的则称为一元运算符。减号运算符既可用作一元运算符,也可用作二元运算符。
``` ```js
console.log(- (10 - 2)) console.log(- (10 - 2))
// → -8 // → -8
``` ```
@ -184,7 +184,7 @@ console.log(- (10 - 2))
一种产生布尔值的方法如下所示: 一种产生布尔值的方法如下所示:
``` ```js
console.log(3 > 2) console.log(3 > 2)
// → true // → true
console.log(3 < 2) console.log(3 < 2)
@ -195,7 +195,7 @@ console.log(3 < 2)
我们可以使用相同的方法比较字符串。 我们可以使用相同的方法比较字符串。
``` ```js
console.log("Aardvark" < "Zoroaster") console.log("Aardvark" < "Zoroaster")
// → true // → true
``` ```
@ -204,14 +204,14 @@ console.log("Aardvark" < "Zoroaster")
其他类似的运算符则包括`>=`(大于等于),`<=`(小于等于),`==`(等于)和`!=`(不等于)。 其他类似的运算符则包括`>=`(大于等于),`<=`(小于等于),`==`(等于)和`!=`(不等于)。
``` ```js
console.log("Apple" == "Orange") console.log("Apple" == "Orange")
// → false // → false
``` ```
在 JavaScript 中,只有一个值不等于其自身,那就是`NaN`Not a Number非数值 在 JavaScript 中,只有一个值不等于其自身,那就是`NaN`Not a Number非数值
``` ```js
console.log(NaN == NaN) console.log(NaN == NaN)
// → false // → false
``` ```
@ -224,7 +224,7 @@ console.log(NaN == NaN)
`&&`运算符表示逻辑与,该运算符是二元运算符,只有当赋给它的两个值均为`true`时其结果才是真。 `&&`运算符表示逻辑与,该运算符是二元运算符,只有当赋给它的两个值均为`true`时其结果才是真。
``` ```js
console.log(true && false) console.log(true && false)
// → false // → false
console.log(true && true) console.log(true && true)
@ -233,7 +233,7 @@ console.log(true && true)
`||`运算符表示逻辑或。当两个值中任意一个为`true`时,结果就为真。 `||`运算符表示逻辑或。当两个值中任意一个为`true`时,结果就为真。
``` ```js
console.log(false || true) console.log(false || true)
// → true // → true
console.log(false || false) console.log(false || false)
@ -244,13 +244,13 @@ console.log(false || false)
在混合使用布尔运算符和其他运算符的情况下,总是很难确定什么时候需要使用括号。实际上,只要熟悉了目前为止我们介绍的运算符,这个问题就不难解决了。`||`优先级最低,其次是`&&`,接着是比较运算符(`>``==`等),最后是其他运算符。基于这些优先级顺序,我们在一般情况下最好还是尽量少用括号,比如说: 在混合使用布尔运算符和其他运算符的情况下,总是很难确定什么时候需要使用括号。实际上,只要熟悉了目前为止我们介绍的运算符,这个问题就不难解决了。`||`优先级最低,其次是`&&`,接着是比较运算符(`>``==`等),最后是其他运算符。基于这些优先级顺序,我们在一般情况下最好还是尽量少用括号,比如说:
``` ```js
1 + 1 == 2 && 10 * 10 > 50 1 + 1 == 2 && 10 * 10 > 50
``` ```
现在我们来讨论最后一个逻辑运算符,它既不属于一元运算符,也不属于二元运算符,而是三元运算符(同时操作三个值)。该运算符由一个问号和冒号组成,如下所示。 现在我们来讨论最后一个逻辑运算符,它既不属于一元运算符,也不属于二元运算符,而是三元运算符(同时操作三个值)。该运算符由一个问号和冒号组成,如下所示。
``` ```js
console.log(true ? 1 : 2); console.log(true ? 1 : 2);
// → 1 // → 1
console.log(false ? 1 : 2); console.log(false ? 1 : 2);
@ -271,7 +271,7 @@ console.log(false ? 1 : 2);
在引言中,我提到 JavaScript 会尽可能接受几乎所有你给他的程序,甚至是那些做些奇怪事情的程序。 以下表达式很好地证明了这一点: 在引言中,我提到 JavaScript 会尽可能接受几乎所有你给他的程序,甚至是那些做些奇怪事情的程序。 以下表达式很好地证明了这一点:
``` ```js
console.log(8 * null) console.log(8 * null)
// → 0 // → 0
console.log("5" - 1) console.log("5" - 1)
@ -290,7 +290,7 @@ console.log(false == 0)
当相同类型的值之间使用`==`符号进行比较时,其运算结果很好预测:除了`NaN`这种情况,只要两个值相同,则返回`true`。但如果类型不同JavaScript 则会使用一套复杂难懂的规则来确定输出结果。在绝大多数情况下JavaScript 只是将其中一个值转换成另一个值的类型。但如果运算符两侧存在`null``undefined`,那么只有两侧均为`null``undefined`时结果才为`true` 当相同类型的值之间使用`==`符号进行比较时,其运算结果很好预测:除了`NaN`这种情况,只要两个值相同,则返回`true`。但如果类型不同JavaScript 则会使用一套复杂难懂的规则来确定输出结果。在绝大多数情况下JavaScript 只是将其中一个值转换成另一个值的类型。但如果运算符两侧存在`null``undefined`,那么只有两侧均为`null``undefined`时结果才为`true`
``` ```js
console.log(null == undefined); console.log(null == undefined);
// → true // → true
console.log(null == 0); console.log(null == 0);
@ -309,7 +309,7 @@ console.log(null == 0);
例如,当左侧值可以转换为`true`时,`||`运算符会返回它,否则返回右侧值。 当值为布尔值时,这具有预期的效果,并且对其他类型的值做类似的操作。 例如,当左侧值可以转换为`true`时,`||`运算符会返回它,否则返回右侧值。 当值为布尔值时,这具有预期的效果,并且对其他类型的值做类似的操作。
``` ```js
console.log(null || "user") console.log(null || "user")
// → user // → user
console.log("Agnes" || "user") console.log("Agnes" || "user")