Javascript 数据类型

所有语言都有不同的方式来存储和呈现数据,它们通常被分成不同的类型。Javascript 还将不同的数据拆分为不同的类型,例如,这让我们能够区分某物是 anumber还是其他东西。如果您使用过其他语言,那么您应该熟悉 Javascript 类型。

从根本上说,Javascript 是一种弱类型语言,这意味着我们不会直接在代码中定义数据的类型。相反,Javascript 根据它们在代码中的上下文来决定类型。这通常称为动态类型

Javascript 有六个原语:

  • undefined– 当代码中未定义或不存在某些内容时。
  • number – 和 之间的数字-2^53 - 12^53 - 11
  • string– 字符组合,即test
  • boolean – truefalse
  • bigint – 一个大于53 – 1的数字。
  • symbol– 一个完全唯一的标识符。

除了这些,还有另外两个 – functionobject

为什么类型很重要?#

在 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。除此之外,值InfinityNaN(不是数字)和-Infinity类型为number

为简单起见,如果您想要 Javascript 可以提供的最大数字,您可以Number.MAX_VALUE在您的代码中使用。同样,Number.MIN_VALUE提供最低值。

如上所述,如果数字周围有引号,有时可能会被误解为字符串。如果我们想将一个字符串解析为一个数字,我们可以使用该parseInt函数将一个字符串强制"5"为一个数字:

let myString = '5'; // Returns "5"
let myNumber = parseInt(myString); // Returns 5

Javascript 布尔类型

如果一个值被设置为truefalse不带引号,则该值被视为布尔值。由于 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 类型是动态的,因此了解truthyfalsy的概念很有用。这些是我们用来描述看似“ 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.

空运算符#

虽然我们有两个用于真值和假值类型的运算符,但我们还有另一个称为空值合并运算符,它仅适用于undefinednull值。如果第一个值是undefinedor null,那么我们将使用??之后的值 .

let j = 4 ?? 6;

上面的变量返回 4。如果我们改写undefined ?? 6,上面的变量将返回 6。

结论#

在本文中,我们详细研究了 Javascript 中的类型。具体来说,我们已经涵盖:

  • Javascript 使用的不同类型。
  • 在 Javascript 中测试类型的等价性。
  • 为什么类型很重要,以及使用它们时可能出现的问题。
  • 如何使用基于类型的运算符将逻辑构建到您的 Javascript 中。