前端面试宝典---数据类型

发布于:2025-04-10 ⋅ 阅读:(35) ⋅ 点赞:(0)

基本数据类型

对于基本类型在创建时无需使用 new 关键字
Bigint在实际开发不常用,如果对于精度要求高可以使用第三方库,如decimal.js

基本数据类型介绍

  1. undefined:当变量被声明但未赋值,或者函数没有返回值时,就会呈现 undefined 状态。
  2. null:null 代表一个空值,它是一个人为设定的空对象指针。
  3. number:该类型用于表示整数和浮点数。JavaScript 里没有专门区分整数和浮点数的类型。
  4. string:字符串是由零个或多个字符组成的序列,可使用单引号、双引号或者反引号来表示。
  5. symbol:这是 ES6 引入的新类型,symbol 是独一无二且不可变的数据类型,常被用作对象属性的键。
  6. BigInt:BigInt 是 ES2020 引入的一种新的基本数据类型,用于表示任意大的整数。在 JavaScript 中,Number 类型只能安全地表示 -(2^53 - 1) 到 2^53 - 1 之间的整数,超出这个范围的整数运算会出现精度丢失问题,而 BigInt 就可以解决这个问题。

基本数据类型判别方法

typeof

console.log(typeof undefined); // 输出: 'undefined'
console.log(typeof null); // 输出: 'object',这是 JavaScript 的一个历史遗留问题
console.log(typeof true); // 输出: 'boolean'
console.log(typeof 123); // 输出: 'number'
console.log(typeof 'hello'); // 输出: 'string'
console.log(typeof Symbol('key')); // 输出: 'symbol'
console.log(typeof 123n); // 输出: 'bigint'

instanceof

instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。可以用来判断值是否为 Boolean、Number、String 的包装对象。

// 示例代码
let boolObj = new Boolean(true);
let numObj = new Number(123);
let strObj = new String('hello');

console.log(boolObj instanceof Boolean); // 输出: true
console.log(numObj instanceof Number); // 输出: true
console.log(strObj instanceof String); // 输出: true

最重要: Object.prototype.toString.call()

  1. Object.prototype.toString 方法
    在 JavaScript 中,每个对象都继承自 Object.prototype,Object.prototype 里有一个 toString 方法。该方法的原始用途是返回一个能反映对象类型的字符串。
    对于 Object 类型的对象,toString 方法会返回一个形如 [object Type] 的字符串,其中 Type 代表对象的具体类型。比如,Object 类型的对象返回 [object Object]。
  2. 不同对象对 toString 方法的重写
    很多内置对象(像 Array、Date、Function 等)都对 toString 方法进行了重写,以满足自身的需求。
    Array 对象的 toString 方法会把数组元素转换为字符串并用逗号连接起来。
    const arr = [1, 2, 3];
    console.log(arr.toString()); // 输出: 1,2,3
    
    Date 对象的 toString 方法会返回一个表示日期和时间的字符串。
    const date = new Date();
    console.log(date.toString()); // 输出类似: Tue Apr 09 2024 14:30:00 GMT+0800 (中国标准时间)
    
  3. 使用 call 方法改变 this 指向
    由于很多对象重写了 toString 方法,所以若要调用 Object.prototype 上原始的 toString 方法,就需要借助 call 方法来改变 this 指向。
    call 方法能让我们在调用函数时指定函数内部的 this 值。当使用 Object.prototype.toString.call(obj) 时,就把 Object.prototype.toString 方法里的 this 指向了 obj,这样就能调用原始的 toString 方法,从而得到对象类型的详细信息。
// 判断 undefined
console.log(Object.prototype.toString.call(undefined)); // 输出: [object Undefined]

// 判断 null
console.log(Object.prototype.toString.call(null)); // 输出: [object Null]

// 判断布尔类型
console.log(Object.prototype.toString.call(true)); // 输出: [object Boolean]

// 判断数字类型
console.log(Object.prototype.toString.call(123)); // 输出: [object Number]

// 判断字符串类型
console.log(Object.prototype.toString.call('hello')); // 输出: [object String]

// 判断 Symbol 类型
console.log(Object.prototype.toString.call(Symbol('key'))); // 输出: [object Symbol]

// 判断 BigInt 类型
console.log(Object.prototype.toString.call(123n)); // 输出: [object BigInt]

// 判断数组类型
const arr = [1, 2, 3];
console.log(Object.prototype.toString.call(arr)); // 输出: [object Array]

// 判断日期类型
const date = new Date();
console.log(Object.prototype.toString.call(date)); // 输出: [object Date]

引用数据类型

引用数据类型介绍

  1. Object:Object 是 JavaScript 中最基础的引用数据类型,可用于存储键值对,是其他对象的基础,许多复杂的数据结构都基于它构建。
const person = {
    name: 'John',
    age: 30
};
  1. Array:Array 用于存储有序的数据集合,元素可以是不同的数据类型,并且可以动态调整长度。
const numbers = [1, 2, 3, 4, 5];
  1. Function:Function 用于封装可重复使用的代码块,可接受参数并返回值,还可以作为参数传递给其他函数,或者作为返回值返回。
function add(a, b) {
    return a + b;
}
  1. Date:Date 用于处理日期和时间,提供了一系列方法来获取和设置日期、时间的各个部分。
const now = new Date();
  1. RegExp:RegExp 用于处理正则表达式,可用于字符串的匹配、替换、分割等操作。
const pattern = /abc/;

引用数据类型判别方法

最重要: Object.prototype.toString.call()

console.log(Object.prototype.toString.call({})); // 输出: '[object Object]'
console.log(Object.prototype.toString.call([])); // 输出: '[object Array]'
console.log(Object.prototype.toString.call(function() {})); // 输出: '[object Function]'
console.log(Object.prototype.toString.call(new Date())); // 输出: '[object Date]'
console.log(Object.prototype.toString.call(/abc/)); // 输出: '[object RegExp]'