所有语言都有不同的方式来存储和呈现数据,它们通常被分成不同的类型。Javascript 还将不同的数据拆分为不同的类型,例如,这让我们能够区分某物是 anumber
还是其他东西。如果您使用过其他语言,那么您应该熟悉 Javascript 类型。
从根本上说,Javascript 是一种弱类型语言,这意味着我们不会直接在代码中定义数据的类型。相反,Javascript 根据它们在代码中的上下文来决定类型。这通常称为动态类型。
Javascript 有六个原语:
- undefined– 当代码中未定义或不存在某些内容时。
- number – 和 之间的数字
-2^53 - 1
,2^53 - 1
即1。 - string– 字符组合,即test。
- boolean – true或false。
- bigint – 一个大于2 53 – 1的数字。
- symbol– 一个完全唯一的标识符。
除了这些,还有另外两个 – function和object。
为什么类型很重要?#
在 Javascript 和任何其他语言中,理解类型对于构建功能正常的应用程序至关重要。Javascript 中常见的许多错误和问题都与类型相关。由于这些原因,许多开发人员使用Typescript,这是一种在顶部添加类型控件的 Javascript。
例如,由于 Javascript 根据上下文推断类型,如果我们写"5"
,它将被视为字符串,而不是数字。因此,以下代码返回"55"
,而不是10
:
let myNumber = "5" + 5; // returns "55"
同样,"false"
不完全等于false
。从这些示例中可以看出,控制和检查代码中的类型是 Javascript 的重要组成部分。
在 Javascript 中检查类型的等价性#
在 Javascript 中,我们有两种方法来检查等价性,它们是==
和===
。
==
– 这将检查两个值是否相同,例如,"5" == 5
为真,10 == 9
为假。===
– 这将检查两个值及其类型是否相同。所以"5" === 5
是假的,但却5 === 5
是真的。
如果等价检查中的两个值相同,则结果将返回true
。否则,它将返回 false。这经常用在像if()
语句这样的逻辑语句中。例如,我们可以使用以下代码:
if("5" === 5) {
// This will not run, since "5" is not the same type as 5
}
else if(5 === 5) {
// This will run instead, since 5 is the same type as 5
}
相反,如果我们想检查两个事物的类型是否相同,我们可以使用typeof
关键字。例如,写作typeof 5 === typeof 6
返回true
:
if(typeof 5 === typeof 6) {
// This will run, since typeof 5 is equal to typeof 6.
}
Javascript 原始类型#
Javascript 原始类型是 Javascript 中的核心值类型,也是我们使用最多的类型。Javascript 中的所有值都是可变的,这意味着它们可以更新和更改。在某些语言中,比如 C,值是不可变的,但 Javascript 没有这个约束。
Javascript未定义类型
正如它所暗示的,undefined
如果没有为它分配任何值,那么它就是 Javascript 中的类型。例如,以下两个变量都是未定义的:
let x; // undefined, since it has no value defined
let x = undefined; // also of type undefined
Javascript字符串类型
Javascript中的字符串是一个接一个的一系列字符。如果一系列字符包含在引号内,即""
,``
或''
,则假定它是一个字符串。以下变量是字符串的示例:
let myString = 'string';
如前所述,关键字false
,或数字,也可以通过在它们周围加上引号来转换为字符串。因此,以下变量也是一个字符串:
let myString = '5';
Javascript数字类型
Javascript 中的数字类型是任何符合 64 位双精度浮点值定义的数字。最终,这意味着 和 之间的任何-2^53 - 1
数字2^53 - 1
。除此之外,值Infinity
、NaN
(不是数字)和-Infinity
类型为number
。
为简单起见,如果您想要 Javascript 可以提供的最大数字,您可以Number.MAX_VALUE
在您的代码中使用。同样,Number.MIN_VALUE
提供最低值。
如上所述,如果数字周围有引号,有时可能会被误解为字符串。如果我们想将一个字符串解析为一个数字,我们可以使用该parseInt
函数将一个字符串强制"5"
为一个数字:
let myString = '5'; // Returns "5"
let myNumber = parseInt(myString); // Returns 5
Javascript 布尔类型
如果一个值被设置为true
或false
不带引号,则该值被视为布尔值。由于 Javascript 缺乏类型控制,我们有时可能会得到本应为布尔值但实际上是字符串的值,例如"true"
. 因此,我们有时可能会同时检查"true"
和检查true
布尔值。
Javascript bigint 类型
在 Javascript 中,bigint 就像一个数字,具有任意精度。2^53 - 1
您可以使用它来安全地存储超出类型限制的大整数number
。如果我们想创建一个bigint
,我们附加n
到一个数字的末尾。例如,typeof
下面的变量将是bigint
:
let myBigInt = 1000000000000n
Abigint
与 a 不同number
– 但如果相等,值将返回 true。例如,2n == 2
将返回 true,而2n === 2
将返回 false。
Javascript 符号类型
符号是 Javascript 中的不可变类型,通常用作对象的唯一键。因此,在创建时,无法更改符号。要定义 a symbol
,我们可以编写以下代码:
let mySymbol = Symbol('hello');
由于创建符号会创建唯一标识符,因此没有两个符号是相同的。在某些情况下,这可能很有用,但最终这意味着Symbol('hello') === Symbol('hello')
它将始终返回 false。
如何在 Javascript 中检查类型#
我们可以使用typeof
关键字检查变量的类型。typeof
返回类型的字符串名称,如下图:
let i = 0;
if(typeof i === "number") {
// Will run this code, since i is of type "number"
}
让我们看看我们的类型的一些例子,现在我们知道了这个关键字:
typeof undefined; // Returns "undefined"
typeof 5; // Returns "number"
typeof "hello"; // Returns "string"
typeof true; // Returns "boolean"
typeof BigInt(10000000000000000); // Returns "BigInt"
typeof Symbol("Hi"); // Returns "symbol"
typeof {}; // Returns "object"
typeof function(){} // Returns "function"
typeof null // Null is strangely an "object" type
试试看!
Javascript 中的真假#
由于 Javascript 类型是动态的,因此了解truthy和falsy的概念很有用。这些是我们用来描述看似“ false
”的事物的词,但不一定设置为false
完全正确,例如false
,或null
,反之亦然,这被称为“真实”。
falsy可以引用 Javascript 中的以下任何值:
// Falsy values in Javascript
NaN // NaN is falsy
0 // 0 is falsy
-0 // -0 is falsy
undefined // undefined is falsy
null // null is falsy
"" // Empty strings are falsy
'' // Empty strings are falsy
`` // Empty strings are falsy
document.all // document.all is the only falsy object
false // false is of course falsy
然后, truthy指的是任何不虚假的东西。例如,虽然0
是假的,但 0 以外的任何数字都是真。同样,虽然空字符串是falsy,但任何长度的字符串都是truthy。这两个概念在 Javascript 类型中很重要,因为有许多运算符允许我们根据这些信息更改变量。
真假运算符#
现在我们了解了类型和真/假的概念,让我们看一个真实的应用程序。由于Javascript定义了truthy和falsy类型,我们可以根据这些想法在代码中使用特定的运算符。
真实的 AND 运算符
如果值是真值,真值 AND运算符可让您更改某物的值。这意味着您可以执行以下操作:
let i = 5 && 6;
由于5是真值,因此i
实际上返回值6。将&&之后的文本视为备用变量。如果第一个值是真实的,那么我们应该使用第二个。否则,如果它是假的,我们将使用第一个值。
逻辑或运算符#
与真 AND 运算符类似,如果第一个值是假的,则逻辑 OR 运算符返回第二个值。
在下面的示例中,||后面的数字 运算符是返回的值j
,因为undefined
它是假的。
let i = undefined || 5;
// since the first value can be converted to false, the value of i is 5.
空运算符#
虽然我们有两个用于真值和假值类型的运算符,但我们还有另一个称为空值合并运算符,它仅适用于undefined
或null
值。如果第一个值是undefined
or null
,那么我们将使用??之后的值 .
let j = 4 ?? 6;
上面的变量返回 4。如果我们改写undefined ?? 6
,上面的变量将返回 6。
结论#
在本文中,我们详细研究了 Javascript 中的类型。具体来说,我们已经涵盖:
- Javascript 使用的不同类型。
- 在 Javascript 中测试类型的等价性。
- 为什么类型很重要,以及使用它们时可能出现的问题。
- 如何使用基于类型的运算符将逻辑构建到您的 Javascript 中。