JavaScript 中的数据类型和运算符:你需要知道的一切
基本数据类型
根据维基百科:
数据类型(简称类型)是数据的一种属性,它告诉编译器或解释器程序员打算如何使用这些数据。数据类型定义了可以对数据执行的操作、数据的含义以及该类型值的存储方式。
简单来说,数据类型就是一种值的类型。数据类型告诉编程语言该值应该如何使用以及可以对其执行哪些操作。
本文将深入探讨 JavaScript 中各种数据类型及其可执行的操作。本文内容详尽,建议您准备好纸笔。
JavaScript 有两种主要的数据类型:基本数据类型和对象。让我们来了解一下这两种数据类型。
基本数据类型
原始数据类型可以理解为 JavaScript 中的基本数据类型。有些原始数据类型只接受一组固定的值,而另一些则接受特定类型的值。原始数据类型是不可变的,这意味着它们的值不能被更改或修改。我将在文章中进一步解释这一点。
让我们来看看 JavaScript 中的原始数据类型。
数字
数字类型的值是数值,可以像普通数字一样书写12,例如 1、267和853。
JavaScript 使用 64 位来存储数字。64 位足以表示18 万亿亿个数字。你不需要记住这个数字。重点是,我们可以用 JavaScript 表示非常大的数字。
凡对整数进行的运算,均保证精确无误。
console.log(12 + 67) //79
console.log(1234597654 + 987654132476 ) //988888730130
遗憾的是,浮点数并非如此。在 JavaScript 中,浮点数是指带有小数点的数字。
请看以下示例:
console.log(0.1 + 0.2 === 0.3) //false
console.log(0.1 + 0.2) //0.30000000000000004
从这个例子来看,你可能会认为加上某个值0.1 + 0.2会得到另一个值0.3。但实际上我们得到的0.30000000000000004是另一个值。这是为什么呢?
在真正的数学中,我们拥有无限多个数字可供处理。而在 JavaScript 中,我们只有 64 位(相当于 18 万亿亿个数字)。因此,我们无法仅用 64 位精确表示浮点数。当你添加数字时0.1 + 0.2,JavaScript 会返回最接近的可用数字。除非你想精确计算宇宙的年龄,否则这无需担心。
让我们来看看我们可以对数字进行哪些运算。
算术运算
你可能已经猜到了,我们可以在 JavaScript 中对数字进行算术运算。
就像普通的数学运算一样,我们可以进行加、减、乘、除运算。用于执行这些运算的符号称为运算符。+运算符分别用于加法、-减法、*乘法和/除法。
console.log(1 + 2) //3
console.log( 10 - 5) //5
console.log( 2 * 100) //200
console.log(120 / 2) //60
但是,在使用运算符时,我们必须注意一个叫做运算符优先级的概念。
根据Mozilla 开发者网络(MDN) 的说法:
运算符优先级决定了运算符之间的解析方式。优先级较高的运算符会成为优先级较低的运算符的操作数。
我们来看一下这段代码。
console.log(2 + 2 * 10 === 40) //false
console.log(2 + 2 * 10 === 22) //true
JavaScript 中的操作并非从左到右执行。相反,某些运算符的优先级高于其他运算符。例如,` 2 + 2 * 10is` 不是4 * 10 = 40`but`,2 + 20 = 22因为*`is` 的优先级高于 `but`,+所以 `is` 操作会先执行。
如果要从左到右进行算术运算,可以使用括号。
console.log((2 + 2) * 10 == 40); //true
您可以点击此处阅读更多关于运算符优先级的信息。
特殊号码
事实证明,并非所有数字在 JavaScript 中都具有数值意义。JavaScript 有三个特殊数字:Infinity 表示正无穷大,-Infinity 表示负无穷大,NaN 表示“非数字”。
这些特殊数字用于表示无效操作。
console.log(1 / 0) //Infinity
console.log(-1 / 0) //-Infinity
console.log(0 / 0) //NaN
NaN 特别值得关注,因为它很容易造成麻烦。它是一个表示“非数字”的数字。这有时会让人非常困惑。
据MDN报道:
有五种不同类型的操作会返回 NaN 值:
- 无法解析数字(例如 parseInt("blabla") 或 Number(undefined))
- 数学运算,结果不是实数(例如 Math.sqrt(-1))
- 参数的操作数为 NaN(例如 7 ** NaN)
- 不定式(例如 0 * 无穷大)
- 任何涉及字符串且不是加法运算(例如“foo”/3)的操作
您可以使用以下方法测试 NaN 值:Number.isNaN(number)
简而言之,NaN 是一个数值,表示无效结果。
我们来看另一种数据类型。
字符串
字符串是 JavaScript 中的另一种数据类型。字符串表示文本。文本可以用单引号''、双引号""或反引号括起来()。
console.log("This is text");
console.log('This is also text');
有趣的是,在 JavaScript 中,字符串并非仅仅是文本。实际上,字符串中的每个字母都对应一个数字。如果你听说过 ASCII 标准,那么这就是它。计算机中的每个字符都被分配了一个数字。例如,小写字母 a 是 65,大写字母 A 是 97。其他所有字母和字符也是如此。
然而,ASCII 标准所能表示的字符数量有限。这促成了 Unicode 标准的诞生。有了 Unicode 标准,几乎任何字符都可以用数字表示,甚至包括表情符号。这只是一个有趣的事实。
我们不能对字符串进行减法、乘法和除法运算。这样做会导致NaN我们刚才讨论过的问题。
console.log("No" * "Arithmetic") //NaN
但是,我们可以对字符串使用加法运算符。这称为字符串连接。通过这种方式,我们可以将两个字符串合并成一个字符串。
console.log("Yes" + " Concatenation") //Yes Concatenation
我们还可以使用方括号表示法来访问字符串中的单个字符。但是我们不能修改这些字符。正如我之前提到的,这是因为基本数据类型是不可变的。如果我们尝试修改字符串,JavaScript 在严格模式下会抛出错误。
'use strict'
let myUsername = "codingknite";
console.log("myUsername[0]") //c
myUsername[0] = 'k'; // Throws error
布尔值
布尔值是 JavaScript 中的另一种数据类型,它只有两个值,分别写作“是”和“true否” false。布尔值可以用于执行逻辑运算。你可以把布尔值理解为我们向 JavaScript 提出的“是”或“否”问题的答案。
console.log(5 > 2) //true
console.log(10 > 120) //false
我们可以使用相当多的运算符来对布尔值进行操作。
相等运算符
相等运算符用于比较两个值是否相等。结果是一个布尔值。
- 运算符 (==) 表示“等于”。
- 运算符 (!=) 表示“不等于”。
- 运算符 (===) 表示“严格等于”。
- 运算符 (!==) 表示“严格不等于”。
console.log(2 == 2) //True
console.log("apple" == "pineapple") //false
console.log("JavaScript" === "JavaScript") //true
console.log("JavaScript" !== "Java") //true
在 JavaScript 中,有一个值不等于它本身,那就是 NaN。
console.log(NaN === NaN) //false
据MDN报道:
与 JavaScript 中所有其他可能的值不同,无法依赖相等运算符(== 和 ===)来判断一个值是否为 NaN,因为 NaN == NaN 和 NaN === NaN 的结果都为 false。因此,需要一个 isNaN 函数。
NaN 不等于 NaN 的问题由来已久,这是个事实,请接受。如果您想了解更多关于 NaN 以及它为何不等于自身的信息,请阅读这篇文章。
相等运算符和严格相等运算符之间有一个区别,我稍后会讲到。
比较运算符
比较运算符用于比较两个或多个值。结果为两个布尔值之一。
这些是最常用的比较运算符。
- 运算符(>)用于表示“大于”。
- 运算符 (<) 用于表示“小于”。 console.log(5 > 3) // true console.log(10 < 15) // false
- 运算符(>=)表示“大于或等于”。
- 运算符 ( <= ) 表示“小于或等于”。
- 运算符 ( == ) 表示“等于”。
- 运算符 ( === ) 表示“严格等于”。
逻辑运算符
逻辑运算符用于比较两个条件。JavaScript 有三个主要的逻辑运算符。
与运算符
AND 运算符用于&&比较两个值,如果左侧和右侧的值都为真,则返回真;否则返回假。
console.log(5 > 2 && 10 >8) //true
console.log( 5 > 2 && 8 > 10) //false
手术室操作员
OR 运算符(表示为 I/O)||比较两个值,如果左侧或右侧的值中有一个为真,则返回真;否则返回假。
console.log(5 > 3 && 10 === 10) //true
console.log(10 === 12 && 120 < 100) //false
非操作员
NOT 运算符(写作 !true)!会反转任何给定的值。换句话说,!true 变为 false,!false 变为 true。
console.log(true !== true) //false
console.log("apple" !== "pineapple") //true
自动类型强制
当 JavaScript 接收到错误的值时,它会改变结果值的数据类型。
我们来看一些代码。
console.log(12 * '3'); //36
console.log("50" - 12); //38
console.log(true + 12); //13
console.log("Thirteen" * 2); //NaN
console.log(false + 1); //1
如上代码所示,JavaScript 在接收到异常值时会悄悄地改变数据类型。第一行的字符串 '3' 会变成数字 3,字符串 '50' 也是如此。第三行的字符串 '50'true会变成 1,而第三行的字符串 '50'false会变成 0。
类型强制转换是相等运算符和严格相等运算符之间的区别所在。
console.log(1 == '1') //true
console.log(1 === '1') //false
相等运算符会对接收的值进行类型强制转换,而严格相等运算符则不会。这就是为什么大多数 JavaScript 开发者认为使用严格相等运算符是一种良好的实践,可以避免不必要的类型强制转换。
现在我们来看最后两种基本数据类型。
无效的
Null 是 JavaScript 中的一种原始数据类型,用于表示故意缺失的值。Null 只有一个值,即 false。Nullnull是一个假值,因为它在所有布尔运算中都返回 false。
console.log(!null) //true
console.log(null === null) //true
不明确的
在 JavaScript 中,`undefined` 也是一种原始数据类型,与 `null` 一样,它只有一个值undefined。它表示一个意外缺失的值。`undefined` 也被视为假值,因为它在布尔运算中返回 `false`。在比较值时null,undefined务必注意相等运算符和严格相等运算符。
console.log(null == undefined) //true
console.log(null === undefined) //false
console.log(!undefined) //true
以上就是JavaScript中的基本数据类型。但这还不是全部。
真值与假值
假值是指在条件判断中返回 false 的值。JavaScript
有 5 个基本的假值:undefined`false`、null`false` 0、`false`、`false`''和 `false`。NaN
真值是指除假值(>_-)之外的所有其他值。
let age = 23;
if (age || age === 0) {
console.log('Age is defined');
} else {
console.log('Age is not defined');
}
// returns 'Age is defined';
试着找出上述代码为何会输出“年龄已定义”的信息。
一元运算符
一元运算符是只接受一个值的运算符。
一元运算符的最佳示例是typeof返回指定值类型的运算符。实际上,我们可以使用此运算符来检查我们讨论过的所有数据类型。
console.log( typeof 'text') //string
console.log( typeof 25) //number
console.log( typeof true) //boolean
console.log( typeof false) //boolean
console.log( typeof null) //object
console.log(typeof undefined) //undefined
如果你注意到了,`typeof null` 返回的是一个对象。我将在下一篇文章中解释原因。
二元运算符
二元运算符是对两个值执行运算的运算符。
console.log(1 + 1) //2
console.log(12 - 5) //7
三元运算符
三元运算符用于检查条件并根据条件是否为真返回相应的值。它就像一个简化的 if 语句。
三元运算符的基本框架是:
condition ? return value if true : return value if false
我们来看一下这段代码。
15 > 12 ? console.log("15 is greater than 12") : console.log("15 is less than 12"); // 15 is greater than 12
好了,以上就是关于基本数据类型你需要知道的一切。那么,
JavaScript 中的第二种数据类型是什么呢?
对象和函数
我不知道你们怎么想,但我觉得今天的数据类型就到此为止吧。下一篇文章我会讲解对象以及关于对象你需要知道的一切。敬请期待。
不过,如果你感兴趣的话,我写了一篇关于函数的博客文章。你可以点击这里查看。
概括
那么,我们看到了什么?
- 数据类型本质上是编程语言理解接收到的数据的方式,它告诉编程语言如何使用这些数据。
- 操作本质上是我们使用接收到的数据的方式。*数据类型有两种类型。
基本数据类型
共有五种主要的基本数据类型
-
数字
- 数值
- 可以对它们进行加法、减法、乘法和除法等算术运算。
-
字符串
- 文本的表示方式
+可以用于连接它们。
-
布尔值
- 用于逻辑运算——两个值分别表示为真和假。
-
无效的
- 故意缺失值
- 只有一个值为 null
- 假值
-
不明确的
- 无意中缺失的值
- 只有一个值未定义
- 也是一个假值
结论
希望您喜欢这篇文章。如果您想关注我的编程之旅,并第一时间获知我的最新文章,请务必在Twitter上关注我。
文章来源:https://dev.to/codingknite/data-types-and-operators-in-javascript-everything-you-need-to-know-ah1