外观
前端数据类型
作者:guo-zi-xin
更新于:9 个月前
字数统计:1.2k 字
阅读时长:3 分钟
JavaScript
是一种有着动态类型的动态语言。JavaScript
中的变量与任何特定值类型没有任何关联,任何变量都可以被赋予(和重新赋予)各种类型的值
JavaScript 也是一个弱类型语言,这意味着当操作涉及不匹配的类型时,它允许隐式类型转换,而不是抛出类型错误。
前端数据类型分为基本数据类型
和复杂数据类型
除了
Object
以外,所有类型都定义了表示在语言最低层面的不可变值。我们将这些值称为原始值。除了
null
和undefined
,所有原始类型都有它们相应的对象包装类型,这为处理原始值提供可用的方法。例如,Number
对象提供像toExponential()
这样的方法。 当在原始值上访问属性时,JavaScript 会自动将值包装到相应的包装对象中,并访问对 象上的属性。然而,在null
或undefined
上访问属性时,会抛出TypeError
异常,这需要采用可选链运算符。
基本数据类型
类型 | typeof返回值 | 对象包装器 |
---|---|---|
Null | object | 不适用 |
Undefined | undefined | 不适用 |
Boolean | boolean | Boolean |
Number | number | Number |
String | string | String |
Symbol | Symbol | Symbol |
BigInt[1] | bigint | BigInt |
- 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()
该方法会返回一个布尔值表示该值是否为数组