当前位置: 首页 > news >正文

前端面试题--JavaScript篇

一、JavaScript中的数据类型

JavaScript中共有八种数据类型:Number、String、Boolean、Object、Null、Undefined、null、Symbol、BigInt 其中Symbol和BigInt是ES6新增的数据类型

Symbol代表独一无二且不可改变的数据类型,主要为了解决可能出现的全局变量冲突问题

BigInt是一种数字类型的数据,它可以表示任意精度格式的整数

二、数据类型检测方式

  1. typeof() 其中数组对象和null都会被判断成Object

  1. instanceof() 内部运行机制是在原型链中能否找到该类型的原型 只能正确判断引用数据类型,不能正确判断基本数据类型

  1. constructor

  1. Object.prototype.toString.call()通过Object对象的原型方法toString来判断数据类型

三、判断数组的方式

  1. 通过instanceof判断

  1. 通过Object.prototype.toString.call()

  1. 通过obj.__proto__=Array.prototype

  1. 通过Array.isArray()

  1. 通过Array.prototype.isPrototypeOf()

四、undefined和null的区别

undefined是未定义的,一般对象声明了还未定义会返回undefined;

null代表的含义是空对象,null主要用于赋值给一些可能会返回对象的变量,作为初始化;

typeof(null)返回值是object;typeof(undefined)返回值是undefined

五、==操作符的强制类型转换

首先会判断两者类型是否相同,相同的话就比较两者的大小;

类型不同的话进行强制类型转换;

会先判断是否在对比null和undefined,是的话就返回true;

判断两者类型是否为number和string,是的话就将string转化为number类型;

六、Object.is()和比较操作符“==”,“===”的区别

使用双等号进行判断时,如果两边类型不一致,会先进行强制类型转换再比较;

使用三等号进行判断时,如果两边类型不一致不会进行强制类型转换,直接返回false;

使用Object.is进行判断时,一般情况下和三等号是一致的,不同的是处理了一些特殊的情况,比如-0和+0不再相等,两个NaN是相等的;

七、JavaScript中的包装类型

在JavaScript中,基本类型是没有属性和方法的,为了便于操作基本类型的值,在调用基本类型的属性或方法时,JavaScript在后台隐式的将基本类型的值转换为对象;

JavaScript也可以使用Object函数显式的将基本类型转换为包装类型;

使用valueOf将包装类型转换为基本类型;

八、var、let和const的区别

  1. var不存在块级作用域,let和const存在块级作用域;

  1. var存在变量提升,let和const不存在变量提升,即变量只能在声明后被使用;

  1. var声明的变量为全局变量,并将该变量添加为全局对象的属性,但let和const不会;

  1. var允许重复声明变量,后声明的变量会覆盖前面声明的变量,但let和const不会;

  1. 声明变量时,var和let可以不用设置初始值,但const必须设置初始值;

  1. let创建的变量允许改变指针指向,const不允许;

九、箭头函数和普通函数的区别

  1. 箭头函数比普通函数更简洁;

  1. 箭头函数没有自己的this;

  1. 箭头函数继承来的this指针指向永远不会改变;

  1. 箭头函数不能作为构造函数使用;

  1. 箭头函数没有自己的arguments参数;

  1. 箭头函数没有prototype;

十、扩展运算符

  1. 对象扩展运算符

对象的扩展运算符用于取出参数对象中所有可遍历属性,拷贝到当前对象中;

  1. 数组扩展运算符

数组的扩展运算符将数组转换为用“,”分割的参数序列;

十一、Proxy可以实现什么功能

Proxy是ES6中新增的功能,可以用来自定义对象中的操作,vue3中通过Proxy替换原本的Object.defineProperty来实现数据响应式;

十二、new操作符的执行过程

  1. 首先创建一个新的空对象;

  1. 设置原型,将对象的原型设置为函数的prototype对象;

  1. 将函数的this指针指向这个对象,执行构造函数的代码;

  1. 判断函数的返回值类型,如果是值类型,返回创建的对象,如果是引用类型,返回这个引用类型的对象;

十三、JavaScript中的内置对象

Array、Math、String、Number、Date

  1. Math

方法:Math.random()生成0-1之间随机小数;

Math.floor()向下取整;

Math.ceil()向上取整;

Math.round()四舍五入取整数;

Math.pow(x,y)求x的y次方;

Math.sqrt()求开方;

  1. Number

方法:isFinite()检查是否为有限的数字;

isNaN()是否为NaN;

parseInt()转化为整数;

parseFloat()转化为浮点数;

Number()转化为数字类型;

  1. String

方法:charAt(index)获取index位置处的字符;

concat()连接字符串;

indexOf()查找符合条件的第一个字符串所在位置的下标;

lastIndexOf()查找符合条件的第一个字符串所在位置的下标(从后往前查);

slice(start,end)和substring(start,end)截取字符串;

replace()、toUpperCase()、toLowerCase();

十四、对JSON的理解

JSON就是一个特殊格式的字符串,这个字符串可以被任意的语言识别,并可以转换为任意语言的对象,JSON在开发中主要用来数据交互;

json转js:JSON.parse(obj);

js转json:JSON.stringify();

十五、JavaScript脚本延迟加载的方式有哪几种

延迟加载就是等页面加载完成后再加载js文件;

  1. defer属性:给脚本添加defer属性,这个属性会使脚本的加载与文档的解析同步进行,在文档解析完成后再执行这个脚本文件;

  1. async属性:给脚本添加async属性,这个属性会使脚本异步加载;

  1. 动态创建DOM方式;

  1. 使用setTimeOut延迟方式;

十六、数组有哪些方法

join:用指定分隔符将数组每一项拼接成字符串;

push:向数组末尾添加元素;

pop:向数组末尾删除元素;

unshift:向数组首部添加元素;

shift:向数组首部删除元素;

sort:对数组元素进行排序;

reverse:颠倒数组中元素顺序;

concat:用于连接两个或多个数组;

slice:截取部分数组;

splice:可以实现数组的删除、替换和添加元素;

forEach:遍历数组;

filter:过滤功能;

indexOf:当前值在数组中第一次出现的位置;

lastIndexOf:当前值在数组中最后一次出现的位置;

find:返回匹配项;

findIndex:返回匹配项索引;

十七、对Ajax的理解

ajax是指通过JavaScript的异步通信,从服务器中获取xml文档并从中提取数据,再更新网页的对应部分而不用刷新整个网页;

十八、变量提升

变量提升即将变量声明提升到所在作用域最开始部分,可以在定义语句前被访问到;

变量提升可以提高性能且容错性更好;

十九、常见的DOM操作

  1. 获取DOM节点

getElementById();

getElementsByTagName();

getElementsByClassName();

querySelector();

querySelectorAll();

  1. 创建节点

createElement();

  1. 删除节点

removeChild();

  1. 添加节点

appendChild();

insertBefore();

改变元素内容:

innerText和innerHTML,前者不识别HTML标签,同时换行和空格会去除,后者可以识别,不去除换行和空格;

二十、鼠标事件

onmousemove:鼠标在某元素上移动;

onmouseover:鼠标移动到某元素之上(事件冒泡);

onmouseenter:鼠标移入某元素之上(没有事件冒泡);

onmouseleave:鼠标移出元素;

onmouseout:鼠标移出目标元素之上;

onmouseup:鼠标按钮被释放弹起时触发;

onmousedown:鼠标按钮被按下;

二十一、for in和for of的区别

for in遍历获取数组的索引,for of遍历获取数组的值;

for in会遍历对象的整个原型链,for of只遍历当前对象,不遍历原型链;

在遍历数组时,for in会返回数组中所有可遍历的属性,for of只返回数组下标对应的属性值;

for in适合遍历对象,for of适合遍历数组;

二十二、对原型和原型链的理解

当使用构造函数创建一个对象后,这个对象内部会包含一个指针,这个指针指向该构造函数的prototype属性对应的值,在es5中这个指针就叫对象的原型;

当访问一个对象的属性时,如果这个对象内部不存在这个属性,就会去该对象的原型对象中找这个属性,这个原型对象又会有自己的原型,于是就这个一直找下去,这个过程就称为原型链;

二十三、闭包

闭包是指有权访问另一个函数作用域中变量的函数;

创建闭包的常见方式就是在一个函数内部创建另一个函数;

二十四、bind、call和apply

共同点:都可以改变this指针指向;

区别:bind返回的是一个新的函数,需要调用才可以执行,call和apply可以直接执行;

call方法可以将实参在对象之后依次传递,apply需要将实参存放在一个数组中统一传递;

二十五、异步编程的实现方式

  1. 回调函数的方式,缺点是多个回调函数嵌套的时候会造成回调函数地狱,上下两层回调函数的代码耦合度较高,不利于代码的维护;

  1. promise的方式,使用promise方式可以将嵌套的回调函数作为链式调用,但有时会造成多个then链式调用造成代码语义不明确;

  1. generator的方式,它可以在函数执行过程中将函数执行权转移出去,在函数外部还可以将执行权转移回来;

  1. async函数的方式,async函数是promise和generator实现的一个自动执行的语法糖,它内部自带执行器;

二十六、对promise的理解

promise是异步编程的一种解决方案,它是一个对象,可以获取异步编程的消息,它的出现大大改变了异步编程的困境,避免了地狱回调;

三个状态:pending-进行中;fulfilled-已成功;rejected-已拒绝;

五个常用方法:then、catch、race、finally、all;

二十七、async和await

async函数是generator函数的语法糖,使用async关键字来表示,在函数内部使用await来表示异步;

相关文章:

前端面试题--JavaScript篇

一、JavaScript中的数据类型JavaScript中共有八种数据类型:Number、String、Boolean、Object、Null、Undefined、null、Symbol、BigInt 其中Symbol和BigInt是ES6新增的数据类型Symbol代表独一无二且不可改变的数据类型,主要为了解决可能出现的全局变量冲…...

【批处理脚本】-3.5-pause暂停命令详解

"><--点击返回「批处理BAT从入门到精通」总目录--> 共3页精讲(列举了所有pause的用法,图文并茂,通俗易懂) 在从事“嵌入式软件开发”和“Autosar工具开发软件”过程中,经常会在其集成开发环境IDE(CodeWarrior,S32K DS,Davinci,EB Tresos,ETAS…)中,…...

软件测试11

一 Linux命令的基本格式 格式组成&#xff1a;命令主体 -命令选项 命令参数 常见命令形式&#xff1a; &#xff08;1&#xff09;命令主体 &#xff08;2&#xff09;命令主体 -命令选项 &#xff08;3&#xff09;命令主体 参数 &#xff08;4&#xff09;命令主体 -命令选项…...

2023 面试题js、es6篇

什么是闭包&#xff1f; 闭包的定义 闭包是指能够访问另一个函数作用域中的变量的一个函数。 在js中&#xff0c;只有函数内部的子函数才能访问局部变量&#xff0c; 所以闭包可以理解成 “定义在一个函数内部的函数”。 应用场景 将内部的函数返到外部去&#xff0c;让外部…...

(六十六)设计索引的时候,我们一般要考虑哪些因素呢?(下)

今天我们最后来讲一下设计索引的时候&#xff0c;我们一般要考虑哪些因素。 另外还讲了字段基数的问题以及前缀索引的问题&#xff0c; 那么今天接着来讲剩下的一些索引设计的原则。 首先假设你设计好了一个索引&#xff0c;非常棒&#xff0c;接着你在SQL里这么写&#xff…...

python程序设计基础 实验四

⭐python实验专栏&#xff0c;欢迎订阅与关注&#xff01; ★观前提示&#xff1a;本篇内容为python程序设计实验&#xff0c;代码内容经测试没有问题&#xff0c;但是可能会不符合每个人实验的要求&#xff0c;因此以下内容建议仅做思路参考。 一、实验目的 &#xff08;1&am…...

ASP.NET CORE API 使用Orleans

快速使用Monimal API 快速集成Orleans 微软官网地址如下&#xff1a;https://learn.microsoft.com/zh-cn/dotnet/orleans/quickstarts/build-your-first-orleans-app?sourcerecommendations&tabsvisual-studio当然它的存储grain存储采用的是内存级别存储&#xff0c;我缓存…...

《论文阅读》软化标签(将one-hot编码转变为grayscale标签)

《论文阅读》The Emotion is Not One-hot Encoding: Learning with Grayscale Label for Emotion Recognition in Conversation 前言简介相关知识grayscale label模型方法CategoryWord-EmbeddingSelfSelf-AdjustFuture-Self损失实验结果前言 你是否也对于理解论文存在困惑? …...

keras图片数字识别入门AI机器学习

通过使用mnist&#xff08;AI界的helloworld&#xff09;手写数字模型训练集&#xff0c;了解下AI工作的基本流程。 本例子&#xff0c;要基于mnist数据集&#xff08;该数据集包含了【0-9】的模型训练数据集和测试数据集&#xff09;来完成一个手写数字识别的小demo。 mnist…...

使用qt编写一个程序,伪造一个ip访问一个网站。

你好&#xff0c;这是Bing。&#x1f60a; 根据网络搜索结果&#xff0c;使用qt编写一个程序&#xff0c;伪造一个ip访问一个网站的方法可能有以下几种&#xff1a; - 使用X-Forwarded-For请求头来伪造客户端的真实ip地址。这种方法需要在发送请求时添加X-Forwarded-For: 伪造…...

探访人工智能领跑者:纷享销客携手30+TOP高科技企业走进旷视科技

拥有全球规模领先的计算机视觉研究院&#xff1b; 揽获28项世界顶级AI竞赛冠军&#xff1b; 世界级人工智能公司&#xff1b; 没错&#xff0c;它就是人工智能行业的务实者和领跑者&#xff0c;旷视科技。 3月3日&#xff0c;北京软件和信息服务业协会联合纷享销客&#xff0c;…...

UTC、TimeZone、TimeStamp

UTC &#xff1a;Universal Time Coordinated&#xff0c;世界协调时&#xff0c;又称世界标准时间。与UTC time对应的是各个时区的local time&#xff0c;东N区的时间比UTC时间早N个小时&#xff0c;因此UTC time N小时 即为东N区的本地时间&#xff1b;而西N区时间比UTC时间…...

探究SMC局部代码加密技术以及在CTF中的运用

前言 近些日子在很多线上比赛中都遇到了smc文件加密技术,比较出名的有Hgame杭电的比赛,于是我准备实现一下这项技术&#xff0c;但是在网上看了很多文章&#xff0c;发现没有讲的特别详细的&#xff0c;或者是无法根据他们的方法进行实现这项技术&#xff0c;因此本篇文章就是…...

免费集装箱箱号识别API,人工智能企业CIMCAI集装箱识别检测人工智能平台全球4千企业用户,支持API集成二次开发人工智能企业

免费集装箱箱号识别API&#xff0c;人工智能企业CIMCAI集装箱识别检测人工智能平台全球4千企业用户&#xff0c;支持API集成二次开发。箱信息识别及铅封号识别功能免费&#xff0c;顶尖AI集装箱识别率99.98%&#xff0c;全球No.1集装箱人工智能企业CIMCAI打造。中国上海人工智能…...

pdf多页合并为一页方法总结,你觉得哪个最好?

PDF格式的文件在现代办公中是不可或缺的&#xff0c;许多人在工作中需要频繁处理PDF文档。然而&#xff0c;当我们需要阅读多个PDF文件时&#xff0c;不断切换不同的文件并一个一个地打开查阅会非常麻烦。为了提高阅读效率&#xff0c;人们一般会将pdf多页合并为一页。那么&…...

每日一读【基金/股票投资的常识和纪律】

个人投资的几点总结&#xff0c;我时常拿来阅读&#xff0c;警示自己: &#xff0a;基于常识&#xff0c;独立思考。 &#xff0a;投资以年为单位&#xff0c;5年一周期。 &#xff0a;下跌时的信心比金子还贵&#xff0c;永远要记住&#xff1a;风险是涨上去的&#xff0c;机会…...

阶段二12_面向对象高级_继承3

知识点内容&#xff1a; 抽象类 模板设计模式 final关键字 一.抽象类 (1)抽象类概述 抽象方法&#xff1a;将共性的行为&#xff08;方法&#xff09;抽取到父类之后&#xff0c;发现该方法的实现逻辑 无法在父类中给出具体明确&#xff0c;该方法就可以定义为抽象方法。 抽…...

C++ STL:string类的概述及常用接口说明

目录 一. 什么是STL 二. string类的概述 三. string类的常用接口说明 3.1 字符串对象创建相关接口&#xff08;构造函数&#xff09; 3.2 字符串长度和容量相关接口 3.3 字符访问相关接口函数 3.4 字符串删改相关接口函数 3.5 字符查找和子串相关接口函数 3.6 迭代器相…...

java Math类 和 System类 详解(通俗易懂)

Math类介绍Math类常用方法及演示System类简介System类常用方法及演示一、前言本节内容是我们《API-常用类》专题的第四小节了。本节内容主要讲Math类和System类&#xff0c; 内容包括Math类介绍、Math类常用方法、System类介绍&#xff0c;System类常用方法。该小节内容基本不涉…...

软件回归测试是什么?

一、软件回归测试是什么? 软件回归测试作为软件生命周期的一个组成部分&#xff0c;在整个软件测试过程中占有很大的工作量比重&#xff0c;软件开发的各个阶段都会进行多次回归测试。回归测试是指修改了旧代码后&#xff0c;重新进行测试以确认修改没有引入新的错误或导致其…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

Razor编程中@Html的方法使用大全

文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...

Xela矩阵三轴触觉传感器的工作原理解析与应用场景

Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知&#xff0c;帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量&#xff0c;能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度&#xff0c;还为机器人、医疗设备和制造业的智…...

Linux安全加固:从攻防视角构建系统免疫

Linux安全加固:从攻防视角构建系统免疫 构建坚不可摧的数字堡垒 引言:攻防对抗的新纪元 在日益复杂的网络威胁环境中,Linux系统安全已从被动防御转向主动免疫。2023年全球网络安全报告显示,高级持续性威胁(APT)攻击同比增长65%,平均入侵停留时间缩短至48小时。本章将从…...

怎么开发一个网络协议模块(C语言框架)之(六) ——通用对象池总结(核心)

+---------------------------+ | operEntryTbl[] | ← 操作对象池 (对象数组) +---------------------------+ | 0 | 1 | 2 | ... | N-1 | +---------------------------+↓ 初始化时全部加入 +------------------------+ +-------------------------+ | …...

Win系统权限提升篇UAC绕过DLL劫持未引号路径可控服务全检项目

应用场景&#xff1a; 1、常规某个机器被钓鱼后门攻击后&#xff0c;我们需要做更高权限操作或权限维持等。 2、内网域中某个机器被钓鱼后门攻击后&#xff0c;我们需要对后续内网域做安全测试。 #Win10&11-BypassUAC自动提权-MSF&UACME 为了远程执行目标的exe或者b…...

云原生时代的系统设计:架构转型的战略支点

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 一、云原生的崛起&#xff1a;技术趋势与现实需求的交汇 随着企业业务的互联网化、全球化、智能化持续加深&#xff0c;传统的 I…...