js foreach用法_36 个JS 面试题为你助力金九银十(面试必读)
来源:javapoint译者:前端小智
为了保证的可读性,本文采用意译而非直译。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,6console.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,4console.log(x);[0,1,2,3,4,5,6,7,8,9]原数组并未改变//接下来用同样方式测试spliceconsole.log(y.splice(2,5));//2,3,4,5,6console.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 propertyuser.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
functionuniquearray(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, RongoDups_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 functionvar 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中,有一些很酷的东西。其中之一是委托模型。当捕获和冒泡时,允许函数在一个特定的时间实现一个处理程序到多个元素,这称为事件委托。事件委托允许将事件侦听器添加到父节点而不是指定的节点。这个特定的侦听器分析冒泡事件,以找到子元素上的匹配项。原文:https://www.javatpoint.com/javascript-tutorial代码部署后可能存在的BUG没法实时知道,事后为了解决这些BUG,花了大量的时间进行log 调试,这边顺便给大家推荐一个好用的BUG监控工具 Fundebug。
交流
我是小智,公众号「大迁世界」作者,对前端技术保持学习爱好者。我会经常分享自己所学所看的干货,在进阶的路上,共勉!
Vue 和 React 的优点分别是什么?(知乎大佬解答)
JS中,如何提高展开运算符的性能
JS 如何创建、读取和删除cookie50 个JS 必须懂的面试题为你助力金九银十
js foreach用法_36 个JS 面试题为你助力金九银十(面试必读)相关推荐
- 36 个JS 面试题为你助力金九银十(面试必读)
来源:javapoint 译者:前端小智 为了保证的可读性,本文采用意译而非直译. 阿里云双12已开启,新老用户均可参与,2核1G云服务器仅需79元,,更多服务器配置及价格请关注:Hi拼团,或点此了解 ...
- 金九银十面试怒拿6个offer——测试开发面试题整理
金九银十面试怒拿6个offer--测试开发面试题整理 1.软件测试的流程是什么? 2.测试用例主要有哪些元素? 3.软件测试有什么策略和阶段? 4.黑盒测试和白盒测试是什么?二者有什么区别? 5.软件 ...
- 金三银四、金九银十 面试宝典 SpringBoot 面试题 超级无敌全的面试题汇总
SpringBoot框架 - 面试宝典 又到了 金三银四.金九银十 的时候了,是时候收藏一波面试题了,面试题可以不学,但不能没有!
- 金三银四、金九银十 面试宝典 Spring、MyBatis、SpringMVC面试题 超级无敌全的面试题汇总(超万字的面试题,让你的SSM框架无可挑剔)
Spring.MyBatis.SpringMVC 框架 - 面试宝典 又到了 金三银四.金九银十 的时候了,是时候收藏一波面试题了,面试题可以不学,但不能没有!
- 金三银四、金九银十 面试宝典 MySQL面试题 超级无敌全的面试题汇总(超万字的面试题,让你的MySQL无可挑剔)
MySQL数据库 - 面试宝典 又到了 金三银四.金九银十 的时候了,是时候收藏一波面试题了,面试题可以不学,但不能没有!
- 158道软件测试面试题及答案!金九银十求职必备!
金九银十,马上又到了大家找工作的黄金季节,对于软件测试这个岗位来说,你知道面试官会问哪些问题吗?对于IT类的面试,都是需要提前做好准备的,否则很容易变成炮灰,我整理了158道企业常用的软件测试面试题, ...
- 金三银四、金九银十 面试宝典 JAVASE八股文面试题 超级无敌全的面试题汇总(接近3万字的面试题,让你的JAVA语法基础无可挑剔)
JavaSE八股文 - 面试宝典 又到了 金三银四.金九银十 的时候了,是时候收藏一波面试题了,面试题可以不学,但不能没有!
- 新增成功到编制为空bug_36 个JS 面试题为你助力金九银10
来源:javapoint 译者:前端小智点赞再看,养成习惯 本文 GitHub https://github.com/qq44924588... 上已经收录,更多往期高赞文章的分类,也整理了很多我的文 ...
- 2021软件测试面试题汇总【备战金九银十】内容较长建议收藏
一.面试基础题 简述测试流程: 1.阅读相关技术文档(如产品PRD.UI设计.产品流程图等). 2.参加需求评审会议. 3.根据最终确定的需求文档编写测试计划. 4.编写测试用例(等价类划分法.边界值 ...
- 耗时108天,终于有人把金九银十面试必问的1309道Java面试题全部整理出来了
就目前大环境来看,跳槽成功的难度比往年高很多.一个明显的感受:互联网行业竞争越来越严峻,面试也是越来越难,不少大厂,如阿里.腾讯.华为的招聘名额明显减少,面试门槛却一再拔高,其实,要想生存下去,势必要 ...
最新文章
- nginx参数配置(3)待续
- CPPUNIT的安装和编译
- debian安装flash插件
- mysql死锁释放时间参数_【Mysql】mysql 事务未提交导致死锁 Lock wait timeout exceeded; try restarting transaction 解决办法...
- 深度学习笔记(32) 目标定位
- L2TP连接result_code_avp: avp is incorrect size. 错误
- 【jQuery笔记Part1】06-jQuery对象与js对象转换
- vim学习 07——跳转缩进
- -bash:ls:command not found,执行命令总是报找不到
- 人工智能数学基础---不定积分5:常用不定积分表
- 大地坐标系与经纬度转换(一):大地坐标系简介
- 题解 [LuoguP5560][Celeste-B]Golden Feather
- 【隔离的CAN通信接口-1Mbps】
- 鼠标在微信开发工具中消失(而在手机模拟器以外可以显示)
- Python——实现防止微信撤回消息
- 2020年下半年网络工程师下午真题及答案
- 计算机工作自动化的特点,计算机内部自动化操作等特点.doc
- 【看表情包学Linux】man 手册 | 复制文件或目录 | 移动文件和重命名操作 | 查看目标文件内容
- ssh连接超时解决方法
- mysql 持有锁 等待锁_MySQL找出锁等待
热门文章
- 【雷达通信】基于matlab线性调频(LFM)脉冲压缩雷达仿真【含Matlab源码 283期】
- Matlab R2020a版安装下载详细操作步骤【Matlab 140期】
- ai/ml_您应该在本周(7月18日)阅读有趣的AI / ML文章
- 对Librehash海洋协议审查的回应
- Eclipse 格式化代码且不影响注释
- java form上传图片_js formData图片上传(单图上传、多图上传)后台java
- 怎么实现角色权限的分配_在 Go 语言中使用 casbin 实现基于角色的 HTTP 权限控制...
- 查看mysql 二进制日志_Mysql主从复制原理及搭建
- ShowDoc v2.4.8 发布,IT团队的在线 API 文档工具
- 推荐一个ajax控件项目 ajax data control