2024面试题(基础篇)基于ChatGPT4回答整理

1、Javascript 有多少种数据类型,如何判断?

JavaScript 有两种不同的数据类型集:原始类型和对象类型

原始类型包括:

  1. Undefined :一个未赋值的变量会有一个默认值 undefined
  2. Null :表示一个空值(注意 typeof null 返回 "object",这实际上是一个历史遗留的错误)。
  3. Boolean :有两个值 truefalse
  4. Number:表示整数和浮点数。
  5. String:表示文本数据。
  6. Symbol(ES6 新增):表示唯一的、不可变的数据值,常用作对象属性的键。
  7. BigInt (ES2020 新增):表示大于 2^53 - 1 的整数。

对象类型包括:

  1. Object:表示一个实例对象,可以包含一组键值对。

判断数据类型的方法:

  • 使用 typeof 操作符可以判断一个变量是否为原始类型(除了 nulltypeof null 会返回 "object")。
  • 使用 instanceof 操作符可以判断一个对象是否为某个构造函数的实例。
  • 使用 Object.prototype.toString.call() 方法可以得到对象的类内部属性,这是一个更准确的类型检测方法。

例如:

javascript 复制代码
typeof 42; // "number"
typeof 'JavaScript'; // "string"
typeof true; // "boolean"
typeof undefined; // "undefined"
typeof Symbol('sym'); // "symbol"
typeof BigInt(1234567890123456789012345678901234567890); // "bigint"
typeof null; // "object"(这是一个历史遗留的错误)
typeof {}; // "object"
typeof []; // "object"
typeof function() {}; // "function"(函数在 JavaScript 中是对象的一种特殊类型)

// 更准确的类型检测
Object.prototype.toString.call([]); // "[object Array]"
Object.prototype.toString.call({}); // "[object Object]"
Object.prototype.toString.call(new Date()); // "[object Date]"

注意,虽然函数在 JavaScript 中被视为对象,但 typeof 对函数返回的是 "function"

2、为什么说 Symbol 是基本数据类型?

Symbol 被认为是基本数据类型(也称为原始数据类型),因为它满足基本数据类型的特征:

  1. 不可变性Symbol 的值是不可变的,一旦创建,就不能修改。
  2. 唯一性 :每个 Symbol 的值都是唯一的,即使它们有相同的描述也不相等。
  3. 不可构造Symbol 不是对象,不能使用 new 关键字来构造,它是通过调用 Symbol 函数来创建的。

由于这些特性,Symbol 类型的值可以用作对象属性的键,而不必担心属性名冲突。这使得 Symbol 成为一种适合用作唯一标识符的基本数据类型。

3、JavaScript中基本数据类型有哪些特征?

JavaScript 中的基本数据类型(原始数据类型)具有以下特征:

  1. 不可变性:基本数据类型的值是不可变的。当对这种类型的值进行操作时,实际上是创建了一个新值。
  2. 按值传递:基本数据类型的值在赋值或传递给函数时,都是按值传递的。这意味着会创建一个副本。
  3. 没有属性或方法 :基本数据类型本身不是对象,因此没有可以调用的属性或方法。但是,JavaScript 会自动将基本数据类型包装成对象,以便可以调用方法,如字符串的 .length 属性或 .toUpperCase() 方法。
  4. 存储位置:基本数据类型的值通常存储在栈内存中,这使得访问这些值非常快。

基本数据类型包括:UndefinedNullBooleanNumberStringSymbolBigInt

4、基本类型为什么也可以调方法,比如.toFixed() ?

尽管基本数据类型(如 NumberString)本身不是对象,因此没有方法,但 JavaScript 在需要时会临时将它们转换(或称为"包装")为对象,以便可以调用方法。这个过程通常被称为"自动装箱"。

例如,当你调用一个数值的 .toFixed() 方法时,JavaScript 会临时创建一个 Number 对象,让你能够使用 Number 对象提供的方法。调用方法后,这个临时对象就会被丢弃,你继续持有的是原始的基本类型值。

这个过程是透明的,所以看起来就像基本类型值本身就有方法可以调用。实际上,这些方法是定义在原始类型对应的原型对象上的,例如 Number.prototype.toFixedString.prototype.toUpperCase 等。

5、如何理解原型链?
相关推荐
天平35 分钟前
油猴脚本创建webworker踩坑记录
前端·javascript·typescript
原则猫2 小时前
前端基础大厦
前端
陈随易3 小时前
编程语言级别的Skill市场,AI Agent 的未来形态
前端·后端·程序员
SoaringHeart4 小时前
Flutter进阶:基于 EasyRefresh 的下拉刷新封装 n_easy_refresh_mixin.dart
前端·flutter
IT_陈寒6 小时前
Vite的热更新突然不香了,排查三小时差点砸键盘
前端·人工智能·后端
子兮曰6 小时前
Agency-Agents 深度解析:400+ AI 专家的"梦之队"如何重塑开发工作流
前端·后端·vibecoding
山河木马7 小时前
渲染管线-计算得到gl_Position(顶点着色器)之后续GPU流程
javascript·webgl·图形学
竹林8187 小时前
用 The Graph 查询链上数据实战:从手搓 RPC 到 Subgraph,我的 NFT 项目数据加载快了 10 倍
前端·javascript
妙码生花7 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(十九):点选验证码代码逐行目检
前端·后端·go
Awu12278 小时前
⚡从零开发 Agent CLI(五)实现一个可治理、可扩展的工具系统
前端·人工智能·claude