新增成功到编制为空bug_36 个JS 面试题为你助力,让面试更有力(面试必读)

来源:javapoint

译者:前端小智

点赞再看,养成习惯

本文 GitHub https://github.com/qq44924588... 上已经收录,更多往期高赞文章的分类,也整理了很多我的文档,和教程资料。欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。

为了保证的可读性,本文采用意译而非直译。

1.JS中let和const有什么用?

在现代js中,let&const是创建变量的不同方式。 在早期的js中,咱们使用var关键字来创建变量。 let&const关键字是在ES6版本中引入的,其目的是在js中创建两种不同类型的变量,一种是不可变的,另一种是可变的。

const:它用于创建一个不可变变量。不可变变量是指其值在程序的整个生命周期中永不改变的变量。

let: let用于创建一个可变变量,可变变量是像var这样的普通变量,可以任意次数地更改。

2. JS 中的主要有哪几类错误

JS有三类的错误:

加载时错误:加载web页面时出现的错误(如语法错误)称为加载时错误,它会动态生成错误。

运行时错误:由于滥用HTML语言中的命令而导致的错误。

逻辑错误:这些错误是由于对具有不同操作的函数执行了错误的逻辑而导致的

3. 如何通过类别名获取 dom 元素

在 JS 中使用document.getElementsByClassName() 方法来获取具有类名的元素。

4.JS的作用域链是什么及其作用

一般情况下,变量取值到创建这个变量的函数的作用域中取值。但是如果在当前作用域中没有查到值,就会向上级作用域去查,直到查到全局作用域,这么一个查找过程形成的链条就叫做作用域链。

JS中的作用域链主要用于解析变量的值。 如果没有这个,在不同的作用域内定义了许多变量,JS很难为变量选择某个值。

5.解释JS中的MUL函数

MUL表示数的简单乘法。在这种技术中,将一个值作为参数传递给一个函数,而该函数将返回另一个函数,将第二个值传递给该函数,然后重复继续。例如:x*y*z可以表示为

function mul (x) {

return function (y) {

return function (z) {

return x * y * z;

}

}

}

6.用纯JS编写一个程序来反转字符串

使用内置函数:内置函数reverse()直接反转字符串。

str="jQuery";

str = str.split("")

str = str.reverse()

str = str.join("")

alert(str);

首先将字符串拆分为数组,然后反转数组,最近将字符连接起来形成字符串。

使用循环:首先,计算字符串中的字符数,然后对原始字符串应用递减循环,该循环从最后一个字符开始,打印每个字符,直到count变为零。

7.JS中如何将页面重定向到另一个页面?

使用 location.href:window.location.href =“https://www.onlineinterviewquestions.com/”

使用 location.replace: window.location.replace(" https://www.onlineinterviewquestions.com/;");

8. 列出JS中的一些设计模式:

设计模式是软件设计中常见问题的通用可重用解决方案,以下是一些设计模式是:

创建模式:该模式抽象了对象实例化过程。

结构型模式:这些模式处理不同的类和对象以提供新功能。

行为模式:也称发布-订阅模式,定义了一个被观察者和多个观察者的、一对多的对象关系。

并行设计模式:这些模式处理多线程编程范例。

架构设计模式:这些模式用于处理架构设计。

9. JS中的Array.splice()和Array.slice()方法有什么区别

话不多说,来看第一个例子:

var arr=[0,1,2,3,4,5,6,7,8,9];//设置一个数组

console.log(arr.slice(2,7));//2,3,4,5,6

console.log(arr.splice(2,7));//2,3,4,5,6,7,8

//由此我们简单推测数量两个函数参数的意义,

slice(start,end)第一个参数表示开始位置,第二个表示截取到的位置(不包含该位置)

splice(start,length)第一个参数开始位置,第二个参数截取长度

接着看第二个:

var x=y=[0,1,2,3,4,5,6,7,8,9]

console.log(x.slice(2,5));//2,3,4

console.log(x);[0,1,2,3,4,5,6,7,8,9]原数组并未改变

//接下来用同样方式测试splice

console.log(y.splice(2,5));//2,3,4,5,6

console.log(y);//[0,1,7,8,9]显示原数组中的数值被剔除掉了

slice和splice虽然都是对于数组对象进行截取,但是二者还是存在明显区别,函数参数上slice和splice第一个参数都是截取开始位置,slice第二个参数是截取的结束位置(不包含),而splice第二个参数(表示这个从开始位置截取的长度),slice不会对原数组产生变化,而splice会直接剔除原数组中的截取数据!

10.如何在JS中动态添加/删除对象的属性?

咱们可以使用object.property_name = value向对象添加属性,delete object.property_name 用于删除属性。

例如:

let user = new Object();

// adding a property

user.name='Anil';

user.age =25;

console.log(user);

delete user.age;

console.log(user);

11.解释一下什么是 promise ?

promise是js中的一个对象,用于生成可能在将来产生结果的值。 值可以是已解析的值,也可以是说明为什么未解析该值的原因。

promise 可以有三种状态:

pending:初始状态,既不是成功也不是失败

fulfilled:意味着操作完全成功

rejected:意味着操作失败

一个等待状态的promise对象能够成功后返回一个值,也能失败后带回一个错误

当这两种情况发生的时候,处理函数会排队执行通过then方法会被调用。

大家都说简历没项目写,我就帮大家找了一个项目,还附赠【搭建教程】。

12. 数组去重复的方法有哪些

1.使用 set

function uniquearray(array) {

let unique_array= Array.from(set(array))

return unique_array;

}

2.使用 filter

function unque_array (arr) {

let unique_array = arr.filter(function(elem, index, self) {

return index == self.indexOf(elem);

})

return unique_array;

}

console.log(unique_array(array_with_duplicates));

3.使用 for 循环

Array dups_names = ['Ron', 'Pal', 'Fred', 'Rongo', 'Ron'];

function dups_array(dups_names) {

let unique = {};

names.forEach(function(i) {

If (!unique[i]) {

unique[i] = true; }

});

return Object.keys(unique);} // Ron, Pal, Fred, Rongo

Dups_array(names);

13. undefined,null 和 undeclared 有什么区别?

1.null表示"没有对象",即该处不应该有值,转为数值时为0。典型用法是:

(1) 作为函数的参数,表示该函数的参数不是对象。

(2) 作为对象原型链的终点。

2.undefined表示"缺少值",就是此处应该有一个值,但是还没有定义,转为数值时为NaN。典型用法是:

(1)变量被声明了,但没有赋值时,就等于undefined。

(2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。

(3)对象没有赋值的属性,该属性的值为undefined。

(4)函数没有返回值时,默认返回undefined。

3.undeclared:js语法错误,没有申明直接使用,js无法找到对应的上下文。

14.列出JS基本和非基本数据类型之间的一些区别?

1.目前JS中有6种基本数据类型: Undefined、Null、Boolean、Number、Symbol 和 String。还有1种复杂的数据类型————Object,Object本质上是由一组无序的名值对组成的。Object、Array和Function则属于引用类型。

2.基本数据类型是不可变的,而非基本数据类型是可变的。

3.基本数据类型是不可变的,因为它们一旦创建就无法更改,但非基本数据类型刚可更改,意味着一旦创建了对象,就可以更改它。

4.将基本数据类型与其值进行比较,这意味着如果两个值具有相同的数据类型并具有相同的值,那么它们是严格相等的。

5.非基本数据类型不与值进行比较。例如,如果两个对象具有相同的属性和值,则它们严格不相等。

15. 如何在现有函数中添加新属性

只需给现有函数赋值,就可以很容易地在现有函数中添加新属性。例如,现有一个对象person,通过下面的代码来为 person 添加新的属性:

person.country= “India”;

16. JS中的深拷贝与浅拷贝的区别?

深拷贝递归地复制新对象中的所有值或属性,而拷贝只复制引用。

在深拷贝中,新对象中的更改不会影响原始对象,而在浅拷贝中,新对象中的更改,原始对象中也会跟着改。

在深拷贝中,原始对象不与新对象共享相同的属性,而在浅拷贝中,它们具有相同的属性。

17. 如何在JavaScript中每x秒调用一个函数

在JS中,咱们使用函数 setInterval() 在每x秒内调用函数。如:

setInterval(function (){ alert("Hello"); }, 3000);

18. 解释一下JS的展开操作符?

展开运算符在需要多个参数/变量/元素的位置展开表达式,它用三个点(...)。如:

var mid = [3, 4];

var newarray = [1, 2, ...mid, 5, 6];

console.log(newarray);

// [1, 2, 3, 4, 5, 6]

19. JS中的宿主对象与原生对象有何不同?

宿主对象:这些是运行环境提供的对象。这意味着它们在不同的环境下是不同的。例如,浏览器包含像windows这样的对象,但是Node.js环境提供像Node List这样的对象。

原生对象:这些是JS中的内置对象。它们也被称为全局对象,因为如果使用JS,内置对象不受是运行环境影响。

20. 解释JS中的高阶函数?

高阶函数是JS函数式编程的最佳特性。它是以函数为参数并返回函数作为结果的函数。一些内置的高阶函数是map、filter、reduce 等等。

21. JS 中 == 和 === 区别是什么?

1、对于string,number等基础类型,==和===有区别

1)不同类型间比较,==之比较“转化成同一类型后的值”看“值”是否相等,===如果类型不同,其结果就是不等。

2)同类型比较,直接进行“值”比较,两者结果一样。

2、对于Array,Object等高级类型,==和===没有区别

进行“指针地址”比较。

3、基础类型与高级类型,==和===有区别

1)对于==,将高级转化为基础类型,进行“值”比较。

2)因为类型不同,===结果为false。

22. JS中的匿名函数是什么?

匿名函数:就是没有函数名的函数,如:

(function(x, y){

alert(x + y);

})(2, 3);

这里创建了一个匿名函数(在第一个括号内),第二个括号用于调用该匿名函数,并传入参数。

23. 是否可以在JS中执行301重定向?

JS完全运行在客户端上。301是服务器作为响应发送的响应代码。因此,在JS中不可能执行301重定向。

24. 解释JS中的事件冒泡和事件捕获

事件捕获和冒泡: 在HTML DOM API中,有两种事件传播方法,它们决定了接收事件的顺序。两种方法是事件冒泡和事件捕获。第一个方法事件冒泡将事件指向其预期的目标,第二个方法称为事件捕获,其中事件向下到达元素。

事件捕获

捕获过程很少被使用,但是当它被使用时,它被证明是非常有用的。这个过程也称为滴流模式。在这个过程中,事件首先由最外层的元素捕获,然后传播到最内部的元素。例如:

从上面的示例中,假设单击事件发生在li元素中,在这种情况下,捕获事件将首先处理div,然后处理ul,最后命中目标元素li。

事件冒泡

冒泡的工作原理与冒泡类似,事件由最内部的元素处理,然后传播到外部元素。

从上面的例子中,假设click事件确实发生在冒泡模型中的li元素中,该事件将首先由li处理,然后由ul处理,最后由div元素处理。

24. 如何将文件的所有导出作为一个对象?

import * as objectname from ‘./file.js’用于将所有导出的成员导入为对象。 可以使用对象的点(.)运算符来访问导出的变量或方法,如:

objectname.member1;

objectname.member2;

objectname.memberfunc();

25. 解释一下什么是箭头函数?

箭头函数是在es6或更高版本中编写函数表达式的简明方法。箭头函数不能用作构造函数,也不支持this,arguments,super或new.target关键字,它最适合非方法函数。 通常,箭头函数看起来像 const function_name =()=> {}。

const greet=()=>{console.log('hello');}

greet();

25 解释 JS 中的函数提升

JS允许将声明移动到顶部的默认行为称为提升。JS中创建函数的两种方法是函数声明和函数表达式。

函数声明

具有特定参数的函数称为函数声明,在JS中创建变量称为声明。如:

hoisted(); // logs "foo"

function hoisted() {

console.log('foo');

}

函数表达式

当使用表达式创建函数时,称为函数表达式。如:

notHoisted(); // TypeError: notHoisted is not a function

var notHoisted = function() {

console.log('bar');

};

26. module.exports 和 exports 之间有什么区别?

module和exports是Node.js给每个js文件内置的两个对象。可以通过console.log(module)和console.log(exports)打印出来。如果你在main.js中写入下面两行,然后运行$ node main.js:

console.log(exports);//输出:{}

console.log(module);//输出:Module {..., exports: {}, ...} (注:...代表省略了其他一些属性)

从打印咱们可以看出,module.exports和exports一开始都是一个空对象{},实际上,这两个对象指向同一块内存。这也就是说module.exports和exports是等价的(有个前提:不去改变它们指向的内存地址)。

例如:exports.age = 18和module.export.age = 18,这两种写法是一致的(都相当于给最初的空对象{}添加了一个属性,通过require得到的就是{age: 18})。

27. import 和 exports 是什么?

import和exports 帮助咱们编写模块化的JS代码。使用import和exports,咱们可以将代码分割成多个文件。import只允许获取文件的某些特定变量或方法。可以导入模块导出的方法或变量。

//index.js

import name,age from './person';

console.log(name);

console.log(age);

//person.js

let name ='Sharad', occupation='developer', age =26;

export { name, age};

28. 列出一些单元测试框架

下面是一些最流行的JS单元测试框架:

Unit.js

Jasmine

Karma

Chai

AVA

Mocha

JSUnit

QUnit

Jest

29. JS中有哪些不同类型的弹出框可用

在JS中有三种类型的弹出框可用,分别是:

Alert

Confirm

Prompt

30. 如何将 JS 日期转换为ISO标准

toISOString() 方法用于将js日期转换为ISO标准。 它使用ISO标准将js Date对象转换为字符串。如:

var date = new Date();

var n = date.toISOString();

console.log(n);

// YYYY-MM-DDTHH:mm:ss.sssZ

31. 如何在JS中克隆对象

Object.assign() 方法用于在JS中克隆对象。如:

var x = {myProp: "value"};

var y = Object.assign({}, x);

32. 如何在JS中编码和解码 URL

encodeURI() 函数用于在JS中对URL进行编码。它将url字符串作为参数并返回编码的字符串。

注意: encodeURI()不会编码类似这样字符: / ? : @ & = + $ #,如果需要编码这些字符,请使用encodeURIComponent()。 用法:

var uri = "my profile.php?name=sammer&occupation=pāntiNG";

var encoded_uri = encodeURI(uri);

decodeURI() 函数用于解码js中的URL。它将编码的url字符串作为参数并返回已解码的字符串,用法:

var uri = "my profile.php?name=sammer&occupation=pāntiNG";

var encoded_uri = encodeURI(uri);

decodeURI(encoded_uri);

33. BOM 和 DOM 的关系

BOM全称Browser Object Model,即浏览器对象模型,主要处理浏览器窗口和框架。

DOM全称Document Object Model,即文档对象模型,是 HTML 和XML 的应用程序接口(API),遵循W3C 的标准,所有浏览器公共遵守的标准。

JS是通过访问BOM(Browser Object Model)对象来访问、控制、修改客户端(浏览器),由于BOM的window包含了document,window对象的属性和方法是直接可以使用而且被感知的,因此可以直接使用window对象的document属性,通过document属性就可以访问、检索、修改XHTML文档内容与结构。因为document对象又是DOM的根节点。

可以说,BOM包含了DOM(对象),浏览器提供出来给予访问的是BOM对象,从BOM对象再访问到DOM对象,从而js可以操作浏览器以及浏览器读取到的文档。

34. JS中的substr()和substring()函数有什么区别

substr() 函数的形式为substr(startIndex,length)。 它从startIndex返回子字符串并返回'length'个字符数。

var s = "hello";

( s.substr(1,4) == "ello" ) // true

substring() 函数的形式为substring(startIndex,endIndex)。 它返回从startIndex到endIndex - 1的子字符串。

var s = "hello";

( s.substring(1,4) == "ell" ) // true

35. 解释一下 "use strict" ?

“use strict”是Es5中引入的js指令。 使用“use strict”指令的目的是强制执行严格模式下的代码。 在严格模式下,咱们不能在不声明变量的情况下使用变量。 早期版本的js忽略了“use strict”。

36.解释 JS 事件委托模型?

在JS中,有一些很酷的东西。其中之一是委托模型。当捕获和冒泡时,允许函数在一个特定的时间实现一个处理程序到多个元素,这称为事件委托。事件委托允许将事件侦听器添加到父节点而不是指定的节点。这个特定的侦听器分析冒泡事件,以找到子元素上的匹配项。

代码部署后可能存在的BUG没法实时知道,事后为了解决这些BUG,花了大量的时间进行log 调试,这边顺便给大家推荐一个好用的BUG监控工具 Fundebug。

交流

干货系列文章汇总如下,觉得不错点个Star,欢迎 加群 互相学习。

我是小智,公众号「大迁世界」作者,对前端技术保持学习爱好者。我会经常分享自己所学所看的干货,在进阶的路上,共勉!

关注公众号,后台回复福利,即可看到福利,你懂的。

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

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

相关文章

Lua协程

协作例程 1、同一时刻仅一个例程在运行 2、执行权让渡和恢复【栈】转载于:https://www.cnblogs.com/freebird92/p/4713106.html

PI数据库的使用-PI System Management Tools

1、PI连接管理器 2、标记搜索 3、当前值 转载于:https://www.cnblogs.com/jumahe/p/4107790.html

在python中模块可以封装_python 制作python包,封装成可用模块教程

首先编写py程序:printtest.pydef test():print(print test)将以上.py文件做成python模块,需要在相同目录下创建setup.py文件,setup.py中输入配置信息:from setuptools import setupsetup(nameprinttest,version1.0,py_modules[printtest],)打开终端&…

F# 4.0于全平台发布

随着Visual Studio 2015的发布,由微软创建的函数式编程语言F#也迎来了它的第四个版本。新版本中的变动包括大量的新特性、bug修复、语言本身的一些增强,以及一些性能方面的改进。此外,新版本的F#还简化了在VS2015中进行调试与编辑的方式。\\微…

一种用css实现图片在父框中等比缩放并垂直居中的办法

一个网页中往往会有很多图片&#xff0c;而网站的编辑上传图片时可能并不一定按照为父框设定的那个宽高来传&#xff0c;这样图片往往会将父框撑开或者被父框截断。一种比较好的解决的办法是这样的&#xff1a; HTML代码结构&#xff1a; <div class"dimg"><…

CLR VIA

标题 状态 内容 什么是CLR? 什么是托管模块&#xff1f; 托管模块由什么组成&#xff1f; 。net代码的执行过程 http://www.cnblogs.com/aaa6818162/p/4726581.html http://www.cnblogs.com/kingmoon/archive/2012/07/16/2594459.html 为了执行程序&#xff0c;首…

python ansys workbench联动_联合ANSYS WORKBENCH和经典界面进行后处理

WORKCENCH主要是为不大懂ANSYS命令和编程的工程师服务的&#xff0c;而经典界面则适用于初学者和研究人员。初学者和研究人员是完全不同的两个层次&#xff0c;为什么ANSYS经典界面却同时适合二者呢&#xff1f;实际上&#xff0c;学好ANSYS&#xff0c;关键并非是操作界面&…

jQuery表格排序总成-tablesorter

一个、进口单证<script type"text/javascript" src"js/jquery.js"></script> <script type"text/javascript" src"js/jquery.tablesorter.js"></script> <!-- 引入下面样式则表头出现排序图标。同一时候…

5渲染判断_云渲染怎么收费,5大云渲染平台实测,您选对了吗?

3DMAX云渲染平台都怎么收费&#xff1f;5大云渲染平台测试后才知道差距这么大&#xff0c;您用对了吗&#xff1f;本次共计测试了3个镜头&#xff0c;为了让大家很直观地感受各个平台渲染时间和费用上的对比&#xff0c;我整理了个表格&#xff0c;供大家自行参考和判断。若有疑…

hadoop1常见配置含义

参数 取值 备注 fs.default.nameNameNode 的URI。hdfs://主机名/dfs.hosts/dfs.hosts.exclude许可/拒绝DataNode列表。如有必要&#xff0c;用这个文件控制许可的datanode列表。dfs.replication默认&#…

Android工程的编译过程

现在很多人想对Android工程的编译和打包进行自动化&#xff0c;比如建立每日构建系统、自动生成发布文件等等。这些都需要我们对Android工程的编译和打包有一个深入的理解&#xff0c;至少要知道它的每一步都做了什么&#xff0c;需要什么环境和工具&#xff0c;输入和输出是什…

activiti 工作流设置并行审批_activity、jbpm5、snakerflow常用工作流审批流对比

# 审批流调研背景由于目前产品研发组支持的产品项目越来越多&#xff0c; 同时几乎每个项目都会有导出审批&#xff0c;流程流转等需求&#xff0c;本着提高开发效率和组件化的目的&#xff0c;调研和开发通用的工作流组件&#xff0c;为后面的项目和新的需求提供快速支持。主要…

java 后台开发关键词解释

bean类&#xff1a;是一些实体类&#xff0c;包括viewbean,databean等等。action类&#xff1a;可作为接收显示层的数据&#xff0c;连接显示层和业务逻辑实现层的控制层。model类&#xff1a;MVC中model层就是到层。在java中无特殊含义就是模块。util类&#xff1a;工具类dao:…

docker mysql关掉后启动_Docker启动mysql的坑2

正确启动mysql&#xff1a;docker run -p 3306:3306 --name mysql02 -e MYSQL_ROOT_PASSWORD123456 -d mysql此时虽然启动成功。但是用客户端链接的时候报错连接Docker启动的mysql出现&#xff1a;ERROR 2059 (HY000): Authentication plugin caching_sha2_password cannot be …

Servlet基础知识(二)——web.xml文件的作用

http://www.cnblogs.com/yqskj/articles/2233061.html 转载于:https://www.cnblogs.com/wangerxiansheng/p/4113607.html

Spring web应用最大的败笔

第一篇 介绍下IOC DI Spring主要是业务层框架&#xff0c;现在已经发展成为一个完整JavaEE开发框架&#xff0c;它的主要特点是IoC DI和AOP等概念的融合&#xff0c;强项在面向切面AOP。推出之初因为Ioc/AOP等新设计理念值得框架设计者学习&#xff0c;现在已经成为Java世界主流…

mysql备份的后缀名_mysql备份数据库后缀名

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航&#xff0c;为用户…

如何专注

专注&#xff0c;据说是在这个时代能成功的基础。 看看自己这些分类、专注得了么&#xff1f; 转载于:https://www.cnblogs.com/x3d/p/4117443.html

mysql多主单向环形_mysql多主单向--gt;环形同步_MySQL

bitsCN.com原理&#xff1a;MySQL的Replication是一种多个MySQL的数据库做主从同步的方案&#xff0c;特点是异步&#xff0c;广泛用在各种对MySQL有更高性能&#xff0c;更高可靠性要求的场合。与之对应的另一个技术是同步的MySQL Cluster&#xff0c;但因为比较复杂&#xff…

***PHP 去除换行符

PHP在不同的系统中&#xff0c;换行是不同的 Linux&#xff1a;\n Windows&#xff1a;\r\n mac&#xff1a;\r 所以去除回车换行的方法: 1.使用php定义好的变量&#xff08;比较好的方法&#xff0c;推荐&#xff09; $str str_replace(PHP_EOL, , $str); 2.使用str_replace …