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

基本数据类型

对于基本类型在创建时无需使用 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]'

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/75201.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Lua 函数使用的完整指南

在 Lua 中,函数是一等公民(First-Class Citizen),这意味着函数可以像其他值一样被赋值、传递和操作。以下是 Lua 函数定义的完整指南,涵盖基础语法、高级特性、设计模式及性能优化。 在Lua 中,函数定义的完…

使用StockTV API对接印度金融市场数据全指南:K线、实时行情与IPO新股

一、印度金融市场数据特点 印度作为全球增长最快的主要经济体之一,其金融市场具有以下显著特征: 双交易所体系:国家证券交易所(NSE)和孟买证券交易所(BSE)高流动性品种:Nifty 50指数成分股、银行股等独特交易机制:T2…

2021-10-26 C++繁忙通信兵

缘由繁忙的通讯兵,可以解决一下吗-编程语言-CSDN问答 void 繁忙通信兵() {//缘由https://ask.csdn.net/questions/7544401?spm1005.2025.3001.5141int a 200, s1 8, s2 5, s3 45, p 0, n 0, c 0;std::cin >> n;while (a > n){a - s1 s2;if (a &l…

【Linux】进程控制:创建、终止、等待与替换全解析

文章目录 前言一、重谈进程创建二、进程终止2.1 正常终止的退出码机制2.2 异常终止的信号机制2.3 进程常见的退出方法 三、进程等待:避免僵尸进程的关键3.1 进程等待的必要性3.2 进程等待的两个系统调用接口3.2.1 wait()3.2.2 waitpid()区别 四、进程程序替换4.1 进…

基于Redis实现短信防轰炸的Java解决方案

基于Redis实现短信防轰炸的Java解决方案 前言 在当今互联网应用中,短信验证码已成为身份验证的重要手段。然而,这也带来了"短信轰炸"的安全风险 - 恶意用户利用程序自动化发送大量短信请求,导致用户被骚扰和企业短信成本激增。本…

【后端开发】Spring MVC-常见使用、Cookie、Session

文章目录 代码总结初始化--RestController、RequestMapping传递参数单参数多参数 传递对象后端参数重命名(后端参数映射)--RequestParam必传参数设置非必传参数 传递数组传递集合传递JSON数据JSON语法JSON格式转换JSON优点传递JSON对象 获取URL中参数--P…

青少年编程考试 CCF GESP Python七级认证真题 2025年3月

Python 七级 2025 年 03 月 题号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 答案 B C A B B A A B C A B B A B A 1 单选题(每题 2 分,共 30 分) 第 1 题 下列哪个选项是python中的关键字? A. function B. class C. method D. object…

Vue 框架组件间通信方式

组件间通信方式 不管是 vue2 还是 vue3,组件通信方式很重要,以下是常见的几种通信方式: props:可以实现父子组件、子父组件、甚至兄弟组件通信自定义事件:可以实现子父组件通信全局事件总线 $bus:可以实现…

SpringBoot学生成绩管理系统设计与实现

概述 幽络源本次分享的基于SpringBoot的学生成绩管理系统项目,采用主流的Java技术栈开发,实现了从学生信息管理到成绩统计分析的全流程数字化管理。 主要内容 管理员功能模块 ​​学生信息管理​​:维护学生基本信息档案,支持…

青少年编程与数学 02-016 Python数据结构与算法 01课题、算法

青少年编程与数学 02-016 Python数据结构与算法 01课题、算法 一、算法的定义二、算法的设计方法1. 分治法2. 动态规划法3. 贪心算法4. 回溯法5. 迭代法6. 递归法7. 枚举法8. 分支定界法 三、算法的描述方法1. **自然语言描述**2. **流程图描述**3. **伪代码描述**4. **程序设计…

Java 实现冒泡排序:[通俗易懂的排序算法系列之二]

引言 大家好!欢迎来到我的排序算法系列第二篇。今天,我们将学习另一种非常基础且广为人知的排序算法——冒泡排序 (Bubble Sort)。 冒泡排序的名字非常形象,它模拟了水中气泡上升的过程:较小(或较大)的元素会像气泡一样,通过不断交换,逐渐“浮”到数组的一端。 什么是…

struct结构体、union联合体和枚举

目录 一、结构体的声明和使用 1.1 结构体正常声明和创建 1.2 结构体特殊声明 1.3 结构体的自引用 二、结构体内存对齐 2.1 对齐规则 2.2 #pragma修改 三、结构体传参 四、结构体位段 4.1 位段内存分配 4.2 位段内存应用 五、结构体中的柔性数组概念 六、union联合…

大模型本地部署系列(2) Ollama部署DeepSeek-R1

成功运行截图 部署步骤 我们进入到ollama的官网: Ollama​ollama.com/​编辑 找到上方的Models ,然后点击 此时会跳转到模型列表页面: 点击 deepseek-r1 链接进去,此时我们会看到下拉框中有各个版本的大模型,越往后…

绘制动态甘特图(以流水车间调度为例)

import matplotlib.pyplot as plt import matplotlib.animation as animation import numpy as np from matplotlib import cm# 中文字体配置(必须放在所有绘图语句之前) plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] Fa…

PyTorch实现线性回归的基础写法与封装API写法

目录 1. 基础写法 1.1导包 2.2加载读取数据 2.3原始数据可视化(画图显示) 2.4线性回归的(基础)分解写法 2.5定义训练过程 2.PyTorch实现 线性回归的封装写法(实际项目中的常用写法) 2.1创建线性回归模型 2.2定义损失函数 2.3定义优化器 2.4定义训练过程 1…

python 常用的6个爬虫第三方库

Python中有非常多用于网络数据采集的库,功能非常强大,有的用于抓取网页,有的用于解析网页,这里介绍6个最常用的库。 1. BeautifulSoup BeautifulSoup是最常用的Python网页解析库之一,可将 HTML 和 XML 文档解析为树形…

基于BP神经网络的杂草智能识别系统(杂草识别、Python项目)

基于BP神经网络的杂草智能识别系统 项目介绍 本项目是一个基于PyQt5和BP神经网络的杂草智能识别系统。系统通过图像处理和神经网络技术, 能够识别8种不同的杂草类别。用户可以通过上传图片,系统会自动识别图片中的杂草类别,并显示识别结果和…

Python3笔记之号称替代pip的uv包管理器

uv是什么? uv,这是一个由 Astral 团队开发的极快速的Python包和项目管理工具,用Rust语言编写。它集成了多种功能,旨在替代pip、pip-tools、pipx、poetry、pyenv、twine、virtualenv等多个工具,提供更高效、更全面的Py…

IT管理思路

甲方CIO和IT管理者-如何做好组织级IT能力提升_哔哩哔哩_bilibili

ChatGPT的GPT-4o创建图像Q版人物提示词实例展示

最近感觉GPT-4o发布的新功能真的强大,所以总结了一些提示词分享给大家,大家可以去试试,玩法多多,可以用GPT-4o生成图片,然后用可灵进行图生视频,就能去发布视频了!接下来和笔者一起来试试&#…