【前端面试基础】JavaScript篇
创始人
2025-05-28 06:42:07
0

一、数据类型、类型检测、类型转换

1. 数据类型:参考资料

  • 基础类型(值类型):Null、Undefined、Symbol(es6)、Boolean、String、Number、Bigint(es10),在内存中占据固定大小,保存在栈内存中。
    附:JavaScript 数据类型之 Symbol、BigInt

  • 引用类型(复杂数据类型):Object(包括Function函数、Array数组、Date日期、RegExp正则表达式,特殊基本包装类型String、Number、Boolean,单体内置对象Global、Math等),引用类型的值是对象,保存在堆内存中,栈内存存储的是对象的变量标识符以及对象在堆内存中的存储地址。

2. 类型检测:参考资料

  • typeof:① 对于基本类型,除null外均可返回正确结果,null返回为object类型;② 对于引用类型,除function一律返回object类型,function返回function类型。
  • instanceof:能够区分Array、Object和Function,适合用于判断两个对象是否属于实例关系,无法判断一个对象实例具体属于哪种类型,也无法判断Number,Boolean,String等基本数据类型。
  • constructor:函数F被定义时,JS引擎会为F添加prototype原型,并在prototype上添加constructor属性,并让其指向F的引用。ps: null 和 undefined 是无效的对象,因此是不会有 constructor 存在的,这两种类型的数据需要通过其他方式来判断。
    参考资料
  • Object.prototype.toString.call():可精准判断各种数据类型。
  • Array.isArray():可判断数组

3. 类型转换:参考资料

  • 强制转换(显式转换):Number()、parseInt()、String()、Boolean()
  • 自动转换(隐式转换):自动转换为布尔、字符串、数值

二、var、let和const区别

1. 作用域

  • var声明的变量既是全局变量,也是顶层变量,可以跨块访问, 但不能跨函数访问。
    ps:顶层对象,浏览器环境指的是window对象
  • let定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问。
  • const声明只读常量,使用时必须初始化,只能在块作用域里访问,一旦声明常量的值就不能改变。
    📢 const实际上保证的并不是变量的值不得改动,而是变量指向的内存地址所保存的数据不得改动:对于简单类型的数据,值就保存在变量指向的那个内存地址,因此等同于常量;对于复杂类型的数据,变量指向的内存地址,保存的只是一个指向实际数据的指针,const只能保证这个指针是固定的,并不能确保改变量的结构不变。
    📢 用var或let声明过变量,再用const声明同样会报错!!!
    📢 let /const/function会把当前所在的大括号(除函数之外)作为一个全新的块级上下文,应用这个机制,在开发项目的时候,遇到循环事件绑定等类似的需求,无需再自己构建闭包来存储,只要基于let的块作用特征即可解决

对于简单类型的数据,值就保存在变量指向的那个内存地址,因此等同于常量

2. 重复声明

  • var允许在相同作用域内重复声明变量,后面声明的变量会覆盖前面的
  • let和const在同一作用域不允许重复声明变量

3. 变量提升

  • var声明的变量存在「变量提升」情况:变量可以在声明之前调用,值为undefined
console.log(a) //undefined
var a = 10
//在编译阶段,编译器会将其变成以下执行:
var a;
console.log(a);
a = 10;

4. 暂时性死区

  • let、const 声明的变量存在「暂时性死区」:变量在声明前都不可用
var a = 10;
if(true){a = 'abc'; // ReferenceErrorlet a;
}// let 
console.log(b)  // Cannot access 'b' before initialization
let b = 10// const
console.log(c)  // Cannot access 'c' before initialization
const c = 10

三、浏览器EventLoop(事件循环)

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
JAVA多线程知识整理 Java多线程基础 线程的创建和启动 继承Thread类来创建并启动 自定义Thread类的子类&#...
【洛谷 P1090】[NOIP... [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G ...
国民技术LPUART介绍 低功耗通用异步接收器(LPUART) 简介 低功耗通用异步收发器...
城乡供水一体化平台-助力乡村振... 城乡供水一体化管理系统建设方案 城乡供水一体化管理系统是运用云计算、大数据等信息化手段࿰...
程序的循环结构和random库...   第三个参数就是步长     引入文件时记得指明字符格式,否则读入不了 ...
中国版ChatGPT在哪些方面... 目录 一、中国巨大的市场需求 二、中国企业加速创新 三、中国的人工智能发展 四、企业愿景的推进 五、...
报名开启 | 共赴一场 Flu... 2023 年 1 月 25 日,Flutter Forward 大会在肯尼亚首都内罗毕...
汇编00-MASM 和 Vis... Qt源码解析 索引 汇编逆向--- MASM 和 Visual Studio入门 前提知识ÿ...
【简陋Web应用3】实现人脸比... 文章目录🍉 前情提要🌷 效果演示🥝 实现过程1. u...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
windows安装JDK步骤 一、 下载JDK安装包 下载地址:https://www.oracle.com/jav...
分治法实现合并排序(归并排序)... 🎊【数据结构与算法】专题正在持续更新中,各种数据结构的创建原理与运用✨...
在linux上安装配置node... 目录前言1,关于nodejs2,配置环境变量3,总结 前言...
Linux学习之端口、网络协议... 端口:设备与外界通讯交流的出口 网络协议:   网络协议是指计算机通信网...
Linux内核进程管理并发同步... 并发同步并发 是指在某一时间段内能够处理多个任务的能力,而 并行 是指同一时间能够处理...
opencv学习-HOG LO... 目录1. HOG(Histogram of Oriented Gradients,方向梯度直方图)1...
EEG微状态的功能意义 导读大脑的瞬时全局功能状态反映在其电场结构上。聚类分析方法一致地提取了四种头表面脑电场结构ÿ...
【Unity 手写PBR】Bu... 写在前面 前期积累: GAMES101作业7提高-实现微表面模型你需要了解的知识 【技...