js基本类型

69 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第12天,点击查看活动详情

前言

大家好呀,我是L同学。在上篇文章vue3知识点总结(五)中,我们学习了vue3的知识点,包括如何进行父子组件间通讯、v-model语法糖等相关知识点。今天,在这篇文章中,我们将js中的基本类型,这也是面试经常问的问题。

基本类型

js类型共有 8 种数据类型(7种原始类型和1种复杂类型)

注意:

1、Nuber类型代表整数和浮点数。除了常规的数字,还包括所谓的“特殊字符”也属于Number类型。

  • Infinity: 代表数学概念中的无穷大∞,也可以表示-Infinity。比如1/0得到的就是无穷大。
  • NaN:NaN代表一个计算错误,它是一个错误的操作所得到的的结果。比如字符串和一个数字相乘。

2、Undefined:如果我们声明一个变量,但是没有对其进行初始化,它默认就是undefined

3、Null:通常用来表示一个对象为空

console.log(typeof null)  // object

4、BigInt:在早期的javascript中,我们不能正确的表示过大的数字

大于MAX_SAFE_INTEGER的数值,表示的可能是不正确的。Number.MAX_SAFE_INTEGER 常量表示在 JavaScript 中最大的安全整数(maxinum safe integer)(2^53 - 1)。

const maxInt = Number.MAX_SAFE_INTEGER
console.log(maxInt); // 9007199254740991

Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2 将得到 true 的结果,而这在数学上是错误的。

console.log(maxInt + 1); // 9007199254740992
console.log(maxInt + 2); // 9007199254740992

ES11中,引入了新的数据类型BigInt,用于表示大的整数。

BigInt的表示方法是在数值后面加上n。

const bigInt = 9007199254740991n
console.log(bigInt + 1n); // 9007199254740992n
console.log(bigInt + 2n); // 9007199254740993n
  1. Symbol:是ES6中新增的一个基本数据类型,翻译为符号。

在ES6之前,对象的属性名都是字符串的形式,很容易造成属性名的冲突。Symbol用来生成一个独一无二的值

const s1 = Symbol('abc')
const s2 = Symbol('abc')
console.log(s1 === s2); // false

Symbol值是通过Symbol函数来生成的,生成后可以作为属性名。也就是在ES6中,对象的属性名可以使用字符串,也可以使用Symbol值。

Symbol即使多次创建值,它们也是不同的:Symbol函数执行后每次创建出来的值都是独一无二的。我们也可以在创建Symbol值的时候传入一个描述description(ES10新增的特性)。

const s1 = Symbol('abc')
const s2 = Symbol('cba')

const obj = {}

// 1. 写法一:属性名赋值
obj[s1] = 'abc'
obj[s2] = 'cba'

// 2. 写法二:Object.defineProperty
Object.defineProperty(obj, s1, {
  enumerable: true,
  configurable: true,
  writable: true,
  value: 'abc'
})

// 3. 写法三:定义字面量是直接使用
const info = {
  [s1]: 'abc',
  [s2]: 'cba'
}


const symbolKeys = Object.getOwnPropertySymbols(info) // [ Symbol(abc), Symbol(cba) ]
console.log(symbolKeys);
for(const key of symbolKeys) {
  console.log(info[key]);
}

Symbol的目的是为了创建一个独一无二的值,那么如果我们想要创建相同的Symbol应该怎么做呢?

使用Symbol.for方法来创建相同的Symbol。并且我们可以通过Symbol.keyFor方法来获取对应的key。

const s1 = Symbol('abc')
const s2 = Symbol('abc')
console.log(s1 === s2); // false
const s3 = Symbol.for('abc')
const s4 = Symbol.for('abc')
console.log(s3 === s4); // true

const key = Symbol.keyFor(s3)
console.log(key); // abc