JS中的类型&V8执行的过程,JavaScript变强秘籍第二章闪亮登场!

1 阅读5分钟

前言

少年,经过第一章的学习,你已经通过了我的考验。接下来我们来学习秘籍第二章,突破练气期第二层!秘籍的第二章有很多干货,我将向你介绍JS中的基本类型和引用类型,以及V8引擎执行的过程。话不多说赶紧上车!

人物突破练气期第二层.png

JS中的类型

JS中的基本类型(也可叫做原始类型)

1.String

JavaScript 中的 String 是表示文本数据的基本数据类型,用于存储和操作字符序列

字符串的增删改查是我们需要掌握的基本技能

增加
let str = 'hello world'
let str2 = `${str}js`
let str3 = str + 'js'
console.log(str2)
console.log(str3)

其实第二句和第三句增加的方法类似,都是在hello world后直接添加js,输出结果如下:

屏幕截图 2026-05-16 130521.png

裁剪(slice)
let str = 'hello world'
let str2 = str + 'js'
console.log(str2.slice(0, 5))//只包含前面下标,不包含后面下标,左闭右开

聪明的你一定想到了,输出的结果就是hello

查找
let str = 'hello world'
let str2 = `${str} js`
console.log(str2[5])//输出str2下标为5的元素
console.log(str2.at(0))//输出str2下标为0的元素

输出结果为

屏幕截图 2026-05-16 132118.png 需要注意的是,str2中下标为5的元素为 ,也就是空格

2.Number

Number中的数字不分什么整型、单精度、双精度之类的,只有Number这一种类型。
我们这里介绍一个新的知识点,我们都知道,两个Number类型的变量相加,那就只需要进行单纯数学的运算。但如果是数字和字符串相加呢?
看这一段代码:

let num = 123  //number
let num2 = num + 0.1
console.log(num2.toString())
console.log(num2 + '5')

数字和字符串相加,一定要让数字先转换为字符串,才能让它们相加。这里就用到了toString()方法,输出结果为

屏幕截图 2026-05-16 133622.png
你可能会觉得好不公平啊,凭什么只能让咱数字转变成字符串,不能让字符串转变成数字呢?大家都是爹妈养的,你怎么就高人一等了?当然可以。

let m = '2'
console.log(Number(m))

这样的话就可以进行类型转换,但前提是m的值本身就是数字,如果是别的话只会输出NaN

3.boolean

在 JavaScript 中,布尔类型(Boolean)  是基本数据类型之一,只有两个值:true(真)和 false(假),用于表示逻辑状态。

if(true) { 
//boolean 布尔类型 所有数字里,只有0和NaN是false,其他都是true,
 console.log('琪琪')}

只有()里的值为true时,if里的语句才会执行。你也不一定需要输入true,你输入其他数字也可以,只要不输入0和NaN,只有0和NaN是false,其他都是true。

4.undefined

在 JavaScript 中,undefined 是一个基本数据类型,同时也是一个唯一的值,表示“未定义”或“没有赋值”。

5.null

在 JavaScript 中,undefined 是一个基本数据类型,同时也是一个唯一的值,表示“未定义”或“没有赋值”。

6.bigint

Number最大只能进行2的53次方的运算,超出这个值就无能为力了。为了解决这个问题,前人创建了一个新的数据类型bigint,只要我们在超大数字后加一个n,就可以无视Number的限制进行运算。

7.Symbol

Symbol表示独一无二的值。

核心特性
  • 唯一性:即使描述相同,两个 Symbol 也不相等。
  • 不自动转换:不能与字符串拼接(如 Symbol() + '' 会报错),必须显式调用 .toString() 或获取描述。
  • 可作为对象属性键:用于定义对象的唯一属性名,避免命名冲突。
  • 不可枚举:在 for...inObject.keys() 中不可见,但可通过 Object.getOwnPropertySymbols() 获取。

JS中的引用类型(复杂类型)

1.Array

以下是数组的一些基本操作

var arr = ['a','b',1,2]
arr.push(3)
arr.pop()//删除数组最后一个元素
arr.unshift(0)//在数组第一个位置插入元素
arr.shift()//删除数组第一个元素
arr.splice(1, 1)//删除数组第二个元素,第一个下标是位置,第二个下标是长度
arr.splice(2,0,0)//在数组第二个位置插入元素0
arr[2] = 10//将数组第三个元素更改为10

2.Object

在 JavaScript 中,Object 是一种引用类型,也是最复杂、最灵活的数据结构。它可以看作是一组键值对(属性名 → 属性值)的集合,属性名通常是字符串或 Symbol,属性值可以是任意类型(包括函数,此时称为方法)。

3.Function

在 JavaScript 中,Function 是一种特殊的对象,用于封装可重复执行的代码块。每个函数都是 Function 构造函数的实例,因此也具有属性和方法。

4.Date

在 JavaScript 中,Date 是用于处理日期和时间的内置对象,不是基本数据类型,而是 Object 的子类型。

JS中的类型我们就先介绍到这,接下来我们来聊聊V8的执行过程

V8的执行过程

1. 创建一个调用栈 (用来存放预编译的过程)

假设我们声明这样两个变量:

var name = '唐三'
var age = 18

2. 在调用栈中,存入 xx 执行上下文

根据预编译的原理可知,此时调用栈内的情况为

屏幕截图 2026-05-16 142357.png 再进行执行,为这两个变量赋值,

屏幕截图 2026-05-16 142229.png

但如果我们要往栈里存复杂变量呢?

var a = 1
var b = 'hello'
var obj = {
  name: '唐三',
  age: 18,
  like:  {
    one: '十年孤竹',
    two: {
      wuhun: ['蓝银草','昊天锤']
    }

  }
}

3. 执行代码,将原始值 存入 栈中

如果遇到引用类型的值,则将值存入堆空间并生成一个引用地址,将引用地址存入栈中,这样设计的好处,即保证了栈不用设计的很大从而影响 V8 的执行效率,又不会爆栈

屏幕截图 2026-05-16 143351.png

尾声

JavaScript变强秘籍第二章就到此结束了,好好巩固境界,只有修为扎实,才能冲得更高