Skip to content

前端数据类型

作者:guo-zi-xin
更新于:9 个月前
字数统计:1.2k 字
阅读时长:3 分钟

JavaScript 是一种有着动态类型动态语言JavaScript 中的变量与任何特定值类型没有任何关联,任何变量都可以被赋予(和重新赋予)各种类型的值

JavaScript 也是一个弱类型语言,这意味着当操作涉及不匹配的类型时,它允许隐式类型转换,而不是抛出类型错误。

前端数据类型分为基本数据类型复杂数据类型

  • 除了 Object 以外,所有类型都定义了表示在语言最低层面的不可变值。我们将这些值称为原始值。

  • 除了 nullundefined,所有原始类型都有它们相应的对象包装类型,这为处理原始值提供可用的方法。例如,Number 对象提供像 toExponential() 这样的方法。 当在原始值上访问属性时,JavaScript 会自动将值包装到相应的包装对象中,并访问对 象上的属性。然而,在 nullundefined 上访问属性时,会抛出 TypeError 异常,这需要采用可选链运算符。

基本数据类型

类型typeof返回值对象包装器
Nullobject不适用
Undefinedundefined不适用
BooleanbooleanBoolean
NumbernumberNumber
StringstringString
SymbolSymbolSymbol
BigInt[1]bigintBigInt
  • BigInt类型

BigInt类型在 Javascript 中是一个数字的原始值,它可以表示任意大小的整数。使用 BigInt,你可以安全地存储和操作巨大的整数,甚至超过 Number 的安全整数限制

  • Symbol类型

Symbol 是唯一并且不可变的原始值并且可以用来作为对象属性的键(如下)。在某些程序语言当中,Symbol 也被称作“原子(atom)类型”。symbol 的目的是去创建一个唯一属性键,保证不会与其它代码中的键产生冲突。

复杂数据类型

Object

在计算机科学中,对象(object)是指内存中的可以被标识符引用的一块区域。在 JavaScript 中,对象是唯一可变的值。事实上,函数也是具有额外可调用能力的对象。

属性 在 JavaScript 中,对象可以被看作是一组属性的集合。用对象字面量语法来定义一个对象时,会自动初始化一组有限的属性;然后,这些属性还可以被添加和移除。对象属性等价于键值对。属性键要么是字符串类型,要么是 symbol。属性值可以是任何类型的值,包括其它对象,从而可以构建复杂的数据结构。

有两种对象属性的类型:数据属性和访问器属性。每个属性都有对应的特性(attribute)。JavaScript 引擎可在内部访问每个属性,但是你可以通过 Object.defineProperty() 设置它们,或通过Object.getOwnPropertyDescriptor() 读取它们。

  • 数据属性 数据属性将键与值相关联。它可以通过以下属性来描述

    • value 通过属性访问其获取值, 可以是任意的 Javascript的值
    • writable 一个布尔值, 表示是否可以通过赋值来改变属性
    • enumerable 一个布尔值,表示是否可以通过 for...in 循环来枚举属性
    • configurable 一个布尔值,表示该属性是否可以删除,是否可以更改为访问器属性,并可以更改其特性
  • 访问器属性 将键与两个访问器函数(get 和 set)相关联,以获取或者存储值。

    • get 该函数使用一个空的参数列表,以便有权对值执行访问时,获取属性值
    • set 使用包含分配值的参数调用的函数。每当尝试更改指定属性时执行
    • enumerable 一个布尔值,表示是否可以通过 for...in 循环来枚举属性
    • configurable 一个布尔值,表示该属性是否可以删除,是否可以更改为访问器属性,并可以更改其特性

判断数据类型的方式

  • typeof 操作符 typeof运算符返回一个字符串,表示操作数的类型
    • 除了 null,所有原始类型都可以使用typeof 运算符进行测试。typeof null 返回 "object",因此必须使用 === null 来测试 null
  • instanceof操作符 用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。
javascript
function Car(make, model, year) {
  this.make = make;
  this.model = model;
  this.year = year;
}
const auto = new Car('Honda', 'Accord', 1998);

console.log(auto instanceof Car);
// Expected output: true

console.log(auto instanceof Object);
// Expected output: true
  • Object.prototype.toString.call() 该方法可以返回一个[object <具体类型>]的格式 例如 Object.prototype.toString.call('aaa')就会返回[object String]

  • Array.isArray() 该方法会返回一个布尔值表示该值是否为数组

人生没有捷径,就像到二仙桥必须要走成华大道。