[面试常见]Javascript基础知识
#1024程序员节|征文#
- Object.assign 和对象扩展运算符有什么区别?是深拷贝还是浅拷贝?
都进行浅拷贝,只赋值对象的第一层属性,而不会递归复制整个对象结构
**const mergedObj = Object.assign({},obj1,obj2)
- JavaScript 中 Map 和 Object 的区别是什么?
特性 | Map | Object |
---|---|---|
构造方式 | const map = new Map(); 或 const map = new Map([['key', 'value']]); | const obj = {}; 或 const obj = new Object(); 或 const obj = Object.create({}); |
键的类型 | 可以是任意类型,包括对象、数组、函数等,不会进行数据类型转换 | 必须是string或Symbol,如果非String类型,会进行数据类型转换 |
键的顺序 | 有序,按照插入的顺序返回 | 无序,不会按照添加顺序返回 |
键值对个数 | 直接通过size 属性访问 | 只能手动计算,通过Object.keys() 方法或for...in 循环统计 |
键值对的访问 | 使用set(key, value) 添加或修改,使用get(key) 访问 | 使用点(. )或中括号([] )的形式添加、修改或访问 |
判断键是否存在 | 使用has(key) 方法 | 使用'key' in obj 语法 |
删除键值对 | 使用delete(key) 方法,或使用clear() 方法清空所有键值对 | 使用delete obj.key 语法删除 |
迭代器 | keys() 、values() 、entries() 方法返回的值都具有iterator特性,可以直接使用for...of 进行遍历 | 本身不具有iterator特性,默认情况下不能使用for...of 进行遍历,需要手动获取键后再迭代 |
JSON序列化 | 不支持直接进行JSON序列化,但可以使用Array.from(map) 转换为二维数组后再进行序列化 | 支持JSON.stringify() 和JSON.parse() 操作 |
应用场景 | 适用于需要保持键值对插入顺序,或键为复杂数据类型(如对象、数组等)的场景 | 是JavaScript中最常用的引用类型数据,适用于存储键值对的集合 |
- JavaScript 中判断数据类型的方式有哪些?
typeof、instanceOf、Object.prototype.toString.call()、Array.isArray()、typeof&instanceof
- JavaScript 有哪些内置对象?
- JavaScript 中常用的正则表达式有哪些?
正则表达式-CSDN博客
匹配文本、验证输入、替换文本【不了解】Regex101
- 说说你对 JSON 的理解?
轻量级数据交换格式,先前后端通讯数据传递常用,配置文件,与JS对象表示相似
- Javascript 脚本延迟加载的方式有哪些?
- async属性:不堵塞HTML解析,多个执行顺序不确定
- defer属性:按照顺序执行,HTML解析完成后才执行,使用操作DOM的脚本
- 动态创建脚本元素
- 使用模块化加载工具
原生页面引入Webpack打包JS-CSDN博客
前端模块化CommonJS、AMD、CMD、ES6_ 模块化区别-CSDN博客
- JavaScript 脚本异步加载如何实现?各有什么区别?
- 什么是 JavaScript 的类数组对象?如何转化为数组?
有类似数组的特性,但并不是数组的对象,通常具备length属性和按索引存储的元素(argumments对象、DOM方法返回的集合NodeList)
- Array.prototype.slice.call(arrayLike)[slice返回原数组的一部分浅拷贝]
- Array.from(arrayLike)
- 扩展运算符[...arrayLike]
- Javascript 的数组有哪些原生方法?
Array数组常用方法汇总_array 方法-CSDN博客
Javascript中Object、Array、String_objectarray-CSDN博客
1.数组和字符串的转换方法:toString()、join()
2.push/pop、unshift/shift
3.数组连接方法contact
4.forEach、map
5.find、findIndex,some\every,flat、flatMap
- 为什么 JavaScript 函数的 arguments 参数是类数组而不是数组?如何遍历类数组?
Javascript剩余参数、arguments对象和柯里化函数-CSDN博客
**借用函数**,还可应用与继承
- 什么是 DOM 和 BOM?
DOM文档对象模型:HTML/XML->DOM述,将网页内容转换为JS可操作对象
BOM浏览器对象模型:浏览器提供的用于操作浏览器的接口
DOM(Document Object Model,文档对象模型)与BOM(Browser Object Model,浏览器对象模型)都是用于操作浏览器窗口和文档的对象,但它们之间存在明显的区别。以下是对两者的详细解释及对比表格:
DOM(文档对象模型)
- 定义:DOM是一种编程接口,它将HTML或XML文档解析为一个由对象构成的模型,每个对象都有自己的属性和方法,允许JavaScript对文档进行动态的更改和交互。
- 结构:DOM的结构是一个树状结构,文档中的元素被表示为节点,并按照树状结构进行组织。
- 交互方式:DOM通过对象之间的嵌套和引用进行交互。例如,
document.getElementById()
可以获取指定ID的元素对象,然后通过该对象的方法和属性对元素进行操作。- 应用范围:DOM主要用于文档内容的操作和交互,例如修改元素内容、添加/删除节点、获取/设置属性等。
- 发展趋势:DOM的发展相对活跃,随着Web技术的发展和标准的更新,DOM的功能也不断扩展和完善。
BOM(浏览器对象模型)
- 定义:BOM提供了独立于任何特定文档的对象,包括浏览器窗口、框架、历史记录、位置、导航器、文档、脚本等。它允许JavaScript与浏览器窗口及其组件进行交互,例如打开/关闭窗口、移动窗口、改变窗口大小等。
- 结构:BOM的结构主要是以浏览器窗口为中心,包括一些与浏览器窗口相关的对象,如窗口大小、滚动条、导航器等。它没有固定的结构,各个浏览器可能会有一些差异。
- 交互方式:BOM主要通过Window对象与JavaScript进行交互。Window对象提供了许多全局函数和变量,用于访问浏览器窗口和与浏览器交互。例如,
window.open()
用于打开一个新的浏览器窗口,window.location
用于获取当前窗口的URL等。- 应用范围:BOM主要用于浏览器窗口和浏览器的交互,例如窗口大小、滚动条、导航器等。它不依赖于任何特定文档,因此可以在任何网页中使用。
- 发展趋势:BOM的发展相对稳定,主要集中在一些浏览器特性和Web API的实现上,例如WebSocket、Geolocation等。
DOM与BOM对比表格
DOM(文档对象模型) BOM(浏览器对象模型) 定义 一种编程接口,将HTML或XML文档解析为对象模型 提供独立于任何特定文档的对象,用于与浏览器交互 结构 树状结构,元素被表示为节点 以浏览器窗口为中心,无固定结构 交互方式 通过对象之间的嵌套和引用进行交互 主要通过Window对象与JavaScript交互 应用范围 文档内容的操作和交互 浏览器窗口和浏览器的交互 发展趋势 发展相对活跃,功能不断扩展和完善 发展相对稳定,主要集中在浏览器特性和Web API的实现上 综上所述,DOM和BOM是两个不同的概念,分别用于操作文档内容和浏览器窗口。在实际开发中,它们通常会结合使用,以实现更丰富的Web应用功能。
- escape、encodeURl、encodeURlcomponent的区别是什么?
- 什么是 AJAX?如何实现一个 AJAX 请求?
- 常见的 DOM 操作有哪些?
- use strict 是什么意思?使用它有什么区别?
严格模式,主要是捕获一些编程错误
- 必须声明再使用
- 禁止使用with语句[执行代码]
- 创建eval()作用域[字符串->JS代码]
- 禁止使用this指向全局对象
- 参数名不能重名
- 禁止设置只读属性
- 禁止删除不可删除的属性
- 禁止使用八进制数字语法
let obj = { a: 1, b: 2, c: 3 }; ----------------------------------- with (obj) { console.log(a + b + c); // 输出: 6 }let code = "2 + 2"; let result = eval(code); console.log(result); // 输出: 4
- JavaScript 如何判断一个对象是否属于某个类?
instanceof:构造函数的prototype属性是否出现在对象的原型链上
constructor
a.constructor===A()
Object.prototype.isPrototypeOf (原型链上)
Dog.prototype.isPrototyprOf(dog)
Animal.prototype.isPrototypeOf(dog)
Object.getPrototypeOf 返回对象的原型
Object.getPrototypeOf(dog)===Dog.prototype
- ajax、 axios、fetch 的区别是什么?
- JavaScript 数组的遍历方法有哪些?
for/forEach/map/filter/reduce/for in
- JavaScript 的 forEach 和 map 方法有什么区别?
- mouseover 和 mouseenter 事件的区别是什么?
mouseover会冒泡、mouseenter不会
一、事件冒泡定义
事件冒泡是指在浏览器中,当一个元素上发生某个事件时(如点击、鼠标移动等),这个事件会按照从内到外的顺序逐级传递给父元素,直到传递到文档根元素(如
document
对象或window
对象)。这种传播的过程和气泡在水中冒升的过程类似,因此被称为事件冒泡。二、工作机制
- 事件触发:当一个元素上的事件被触发时,该事件首先在该元素上进行处理。
- 逐级传递:如果事件没有被在该元素上阻止,它会继续向上冒泡,依次触发父元素的相同类型的事件处理程序。
- 传播到根元素:这个过程会一直持续,直到事件到达文档根节点为止。
三、应用场景
- 简化代码:通过事件冒泡,可以将事件监听器绑定到父元素上,而不需要为每个子元素分别绑定事件监听器。这样可以大大减少代码量,并且便于维护和扩展。
- 事件委托:事件委托是利用事件冒泡机制,将事件处理程序绑定在父元素上,以代理处理子元素的事件。这样可以减少事件处理程序的数量,提高性能,并且能够动态处理新增的子元素,使得代码更加灵活和易于维护。
四、阻止事件冒泡
在某些情况下,可能不希望事件冒泡到父元素。这时可以使用
stopPropagation()
方法阻止事件继续冒泡。调用该方法后,事件将不会再传递给父元素。
- JavaScript 中 substring 和 substr 函数的区别是什么?
- JavaScript 数组的 map 和 forEach 函数中能否通过 break 等语法结束循环?
- JavaScript 中如何合并对象?
Object.assign()、扩展符{...,...}
- JavaScript 如何判断一个对象是不是空对象?
1.obj&&typeof obj==="object"&&Object.keys(obj).length===0
2.for in + Object.hasown(obj,pro)
3.JSON.stringify(obj)==='{}'
4.Object.getOwnPropertyNames(obj).length===0
- JavaScript 的 splice 和 slice 函数会改变原数组吗?
- JavaScript 中怎么删除数组最后一个元素?
- pop()
- splice(-1,1)从尾开始移除一个元素
- slice(0,-1)从头到倒数第一个
- 使用数组长度 arr.length=arr.length-1
- 如何判断网页元素是否到达可视区域?
判断网页元素是否到达可视区域是一个常见的需求,尤其在实现懒加载、无限滚动或者触发动画等场景中非常有用。有以下几种几种
Intersection Observer API
const observer = new IntersectionObserver((entries) => {entries.forEach(entry => {if (entry.isIntersecting) {console.log('元素进入可视区域');// 在这里执行你的逻辑}});
});const target = document.querySelector('#your-element');
observer.observe(target);
getBoundingClientRect
function isElementInViewport(el) {const rect = el.getBoundingClientRect();return (rect.top >= 0 &&rect.left >= 0 &&rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&rect.right <= (window.innerWidth || document.documentElement.clientWidth));
}// 使用
const element = document.querySelector('#your-element');
if (isElementInViewport(element)) {console.log('元素在可视区域内');
}
Element.checkVisibility() 兼容性
- JavaScript 操作数组元素的方法有哪些?
添加
修改
删除
查找
遍历
筛选
变换
- JavaScript 中 for...in 和 for..of 的区别是什么?
for...in(遍历对象的可枚举属性[包括原型上]、返回属性名)
for...of (遍历可迭代对象(数组、Map、Set和字符串等)、返回每次迭代值)
在使用这两种循环时,我还注意到一些其他的重要区别:
- 遍历顺序:for.in 不保证遍历顺序,而 for..of会按照迭代器定义的顺序进行遍历。
- 性能:通常来说,for..of的性能比 for..in 更好,特别是在遍历数组时。所以遍历优先选 for.of
- 继承属性: for...in 会遍历对象的原型链,而 for...of 不会。
- 使用场景:for...in 更适合用于遍历对象的属性,而 for..of 更适合用于遍历数组或其他可迭代对象的值。
// for...in 示例
const obj = { a: 1, b: 2, c: 3 };
for (const key in obj) {console.log(key); // 输出: "a", "b", "c"
}// for...of 示例
const arr = [1, 2, 3];
for (const value of arr) {console.log(value); // 输出: 1, 2, 3
}
- Javascript中如何使用for...of遍历对象
- const对象的属性可以修改吗?
相关文章:

[面试常见]Javascript基础知识
#1024程序员节|征文# Object.assign 和对象扩展运算符有什么区别?是深拷贝还是浅拷贝? 都进行浅拷贝,只赋值对象的第一层属性,而不会递归复制整个对象结构 **const mergedObj Object.assign({},obj1,obj2) JavaScript 中 Map 和 Object 的区别是什么?…...
使用注解@ExcelIgnoreUnannotated实现了在导出 Excel 时忽略没有被标注的字段
ExcelIgnoreUnannotated 注解用于在使用 Apache POI 或其他 Excel 处理库时,指示在导出 Excel 时忽略没有被标注的字段。这意味着只有被特定注解(如 ExcelProperty)标注的字段会被处理和导出。 作用 简化导出过程:只导出需要的字…...

线程的同步
目录 引入 认识条件变量 快速认识接口编辑 认识条件变量编辑 测试代码编辑 生产消费模型 为何要使用生产者消费者模型 理解 编写生产消费模型 BlockingQueue 单生产单消费 多生产多消费 引入 同步:在保证数据安全的前提下,让线程…...

【启明智显分享】ZX7981PG/ZX7981PM融入官方OpenWrt,启明智显SDK/官方OpenWrt任由选择!
好消息!好消息!启明智显ZX7981PG和ZX7981PM正式融入官方 OpenWrt 的大家庭啦!现在开发者不仅可以基于启明智显的SDK进行二次开发,还可以直接应用官方OpenWrt以及我们的开源资料进行开发! 借助OpenWrt的强大生态&…...

如何用java发送包含表格形式的邮件
问题: 如何用java发送包含表格形式的邮件? 方法: 发用freemaker工具来替换html的表格变量,从而动态生成了html。然后再发送这个html格式(不能用纯文本)文本即可。 优化流程: 1、准备模板&#x…...
讲个故事:关于一次接口性能优化的心里路程
这是一个程序猿写的第一个故事,请各位懂行的客官静下心来,慢慢品读。就知道我为什么要单独写一个文章来记录这次过程了,因为实在是太坎坷了...... 背景介绍 近期项目投产时遇到一个问题,投产后在验证时发现大部分用户系统登…...
Centos7升级到openssh9.9
openssh9.9 是2024.9.20出的最新版ssh。因为客户扫描出一大堆centos7的漏洞,全是这个openssh的,好多补丁,所以索性升级到最新版。 需要自己制作rpm包,这个我是不懂,照这个来: Linux服务器升级openssh9.9最…...

使用 STM32F407 串口实现 485 通信
准备工作 了解485通信基本概念与原理:RS485通信详解_485通讯de接什么口-CSDN博客 安装编译软件:keil uVision 5.6 软件资料:STM32CubeF4 固件包,正点原子RS485通信例程 参考视频:第26讲 基础篇-新建H…...

基于NERF技术重建学习笔记
NeRF(Neural Radiance Fields)是一种用于3D场景重建的神经网络模型,能够从2D图像生成逼真的3D渲染效果。它将场景表征为一个连续的5D函数,利用了体积渲染和神经网络的结合,通过学习光线穿过空间时的颜色和密度来重建场…...
webView 支持全屏播放
webView 支持全屏播放 直接上代码 public class CustomFullScreenWebViewClient extends WebChromeClient {WebView webView;Context context;/*** 视频全屏参数*/protected static final FrameLayout.LayoutParams COVER_SCREEN_PARAMS new FrameLayout.LayoutParams(ViewG…...

QGIS之三十二DEM地形导出三维模型gltf
效果 1、准备数据 (1)dem.tif (2)dom.tif 2、qgis加载dem和dom数据 3、安装插件 插件步骤可以参考这篇文章 QGIS之二十四安装插件 安装了Qgis2threejs插件,结果...

【python爬虫】携程旅行景点游客数据分析与可视化
一.选题背景 随着旅游业的快速发展,越来越多的人选择通过互联网平台预订旅行产品,其中携程网作为国内领先的在线旅行服务提供商,拥有大量的旅游产品和用户数据。利用爬虫技术可以获取携程网上各个景点的游客数据,包括游客数量、游…...

python实现onvif协议下控制摄像头变焦,以及融合人形识别与跟踪控制
#1024程序员节 | 征文# 这两天才因为项目需要,对网络摄像头的视频采集以及实现人形识别与跟踪技术。对于onvif协议自然起先也没有任何的了解。但是购买的摄像头是SONY网络头是用在其他地方的。因为前期支持探究项目解决方案,就直接拿来做demo测试使用。 …...

【Vue】Vue3.0(十四)接口,泛型和自定义类型的概念及使用
上篇文章: 【Vue】Vue3.0(十三)中标签属性ref(加在普通标签上、加在组件标签上)、局部样式 🏡作者主页:点击! 🤖Vue专栏:点击! ⏰️创作时间&…...

【C++】红黑树万字详解(一文彻底搞懂红黑树的底层逻辑)
目录 00.引入 01.红黑树的性质 02.红黑树的定义 03.红黑树的插入 1.按照二叉搜索树的规则插入新节点 2.检测新节点插入后,是否满足红黑树的性质 1.uncle节点存在且为红色 2.uncle节点不存在 3.uncle节点存在且为黑色 04.验证红黑树 00.引入 和AVL树一样&am…...
开源FluentFTP实操,操控FTP文件
概述:通过FluentFTP库,轻松在.NET中实现FTP功能。支持判断、创建、删除文件夹,判断文件是否存在,实现上传、下载和删除文件。简便而强大的FTP操作,提升文件传输效率。 在.NET中,使用FluentFTP库可以方便地…...

论文解读 | ECCV2024 AutoEval-Video:一个用于评估大型视觉-语言模型在开放式视频问答中的自动基准测试...
点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 点击 阅读原文 观看作者讲解回放! 作者简介 陈修元,上海交通大学清源研究院硕士生 概述 总结来说,我们提出了一个新颖且具有挑战性的基准测试AutoEvalVideo,用于全…...

postgresql14主从同步流复制搭建
1. 如果使用docker搭建请移步 Docker 启动 PostgreSQL 主从架构:实现数据同步的高效部署指南_docker安装postgresql主从同步-CSDN博客 2. 背景 pgsql版本:PostgreSQL 14.13 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4…...

企业信息化管理中的数据集成方案:销售出库单对接
企业信息化管理中的数据集成方案:销售出库单对接 销售出库单旺店通→金蝶:高效数据集成案例分享 在企业信息化管理中,数据的高效流动和准确对接是实现业务流程自动化的关键。本文将聚焦于一个具体的系统对接集成案例:如何将旺店通…...

3.cpp基本数据类型
cpp基本数据类型 1.cpp基本数据类型 1.cpp基本数据类型 C基本数据类型和C语言的基本数据类型差不多 注意bool类型:存储真值 true 或假值 false,C语言编译器C99以上支持。 C语言的bool类型:要添加 #include <stdbool.h>头文件 #includ…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...

剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...
深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向
在人工智能技术呈指数级发展的当下,大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性,吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型,成为释放其巨大潜力的关键所在&…...

高考志愿填报管理系统---开发介绍
高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发,采用现代化的Web技术,为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## 📋 系统概述 ### 🎯 系统定…...
【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解
一、前言 在HarmonyOS 5的应用开发模型中,featureAbility是旧版FA模型(Feature Ability)的用法,Stage模型已采用全新的应用架构,推荐使用组件化的上下文获取方式,而非依赖featureAbility。 FA大概是API7之…...

海云安高敏捷信创白盒SCAP入选《中国网络安全细分领域产品名录》
近日,嘶吼安全产业研究院发布《中国网络安全细分领域产品名录》,海云安高敏捷信创白盒(SCAP)成功入选软件供应链安全领域产品名录。 在数字化转型加速的今天,网络安全已成为企业生存与发展的核心基石,为了解…...