70个javascript常见面试题

更新时间:2023-07-15 04:25:39 阅读: 评论:0

70个javascript常见⾯试题
1.undefined 和 null 有什么区别?它们是属于虚值
console.log(!!null); // fal
console.log(!!undefined); // fal
undefined是未指定特定值的变量的默认值
null是“不代表任何值的值”
在⽐较null和undefined时,
2. && 运算符能做什么逻辑与
console.log(fal && 1 && []); // fal
console.log(" " && true && 5); // 5
console.log(null == undefined); // true
console.log(null === undefined); // fal帮助的同义词
3. || 运算符能做什么
屏幕坏点修复||逻辑或
// 在其操作数中找到第⼀个真值表达式并返回它
console.log(null || 1 || undefined); // 1
4. 使⽤ + 或⼀元加运算符是将字符串转换为数字的最快⽅法吗?
+是将字符串转换为数字的最快⽅法,因为如果值已经是数字,它不会执⾏任何操作。
5. DOM 是什么?
DOM 代表⽂档对象模型,是 HTML 和 XML ⽂档的接⼝(API)。
6. 什么是事件传播?
当事件发⽣在DOM元素上时,该事件并不完全发⽣在那个元素上。在“冒泡阶段”中,事件冒泡或向上
我的饮食习惯传播⾄⽗级,祖⽗母,祖⽗母或⽗级,直到到达window为⽌;⽽在“捕获阶段”中,事件从window开始向下触发元素 事件或event.target。
事件传播有三个阶段:
捕获阶段–事件从 window 开始,然后向下到每个元素,直到到达⽬标元素。
⽬标阶段–事件已达到⽬标元素。
冒泡阶段–事件从⽬标元素冒泡,然后上升到每个元素,直到到达 window
7. 什么是事件冒泡?
当事件发⽣在DOM元素上时,该事件并不完全发⽣在那个元素上。在冒泡阶段,事件冒泡,或者事件发⽣在它的⽗代,祖⽗母,祖⽗母的⽗代,直到到达window为⽌。
8. 什么是事件捕获?
当事件发⽣在 DOM 元素上时,该事件并不完全发⽣在那个元素上。在捕获阶段,事件从window开始,⼀直到触发事件的元素。
9.event.preventDefault() 和 event.stopPropagation()⽅法之间有什么区别?
event.preventDefault() ⽅法可防⽌元素的默认⾏为。如果在表单元素中使⽤,它将阻⽌其提交。如果在锚元素中使⽤,它将阻⽌其导航。如果在上下⽂菜单中使⽤,它将阻⽌其显⽰或显⽰。 event.stopPropagation()⽅法⽤于阻⽌捕获和冒泡阶段中当前事件的进⼀步传播。
10. 如何知道是否在元素中使⽤了event.preventDefault()⽅法?
我们可以在事件对象中使⽤event.defaultPrevented属性。它返回⼀个布尔值⽤来表明是否在特定元素中调⽤了
event.preventDefault()。
11. 为什么此代码 obj.someprop.x 会引发错误?
const obj = {};
console.log(obj.someprop.x);
12. 什么是 event.target ?
event.target是发⽣事件的元素或触发事件的元素。
13. 什么是 event.currentTarget?
event.currentTarget是我们在其上显式附加事件处理程序的元素。
14. == 和 === 有什么区别?
相机iso==⽤于⼀般⽐较,===⽤于严格⽐较,==在⽐较的时候可以转换数据类型,===严格⽐较,只要类型不匹配就返回fla 15. 为什么在 JS 中⽐较两个相似的对象时返回 fal?
let a = { a: 1 };
let b = { a: 1 };
let c = a;
console.log(a === b); // 打印 fal,即使它们有相同的属性
console.log(a === c); // true
16. !! 运算符能做什么?
!!运算符可以将右侧的值强制转换为布尔值,这也是将值转换为布尔值的⼀种简单⽅法。
console.log(!!null); // fal
console.log(!!undefined); // fal
console.log(!!''); // fal
console.log(!!0); // fal
console.log(!!NaN); // fal
console.log(!!' '); // true
console.log(!!{}); // true
console.log(!![]); // true
console.log(!!1); // true
console.log(!![].length); // fal
17. 如何在⼀⾏中计算多个表达式的值?
可以使⽤逗号运算符在⼀⾏中计算多个表达式。它从左到右求值,并返回右边最后⼀个项⽬或最后⼀个操作数的值。
let x = 5;
x = (x++ , x = addFive(x), x *= 2, x -= 5, x += 10);
function addFive(num) {
return num + 5;
}
18. 什么是提升?
提升是⽤来描述变量和函数移动到其(全局或函数)作⽤域顶部的术语
19. 什么是作⽤域?
JS 有三种类型的作⽤域:全局作⽤域、函数作⽤域和块作⽤域(ES6)。
全局作⽤域——在全局命名空间中声明的变量或函数位于全局作⽤域中,因此在代码中的任何地⽅都可以访问它们
函数作⽤域——在函数中声明的变量、函数和参数可以在函数内部访问,但不能在函数外部访问。
块作⽤域-在块{}中声明的变量(let,const)只能在其中访问。
20. 什么是闭包?
闭包就是⼀个函数在声明时能够记住当前作⽤域、⽗函数作⽤域、及⽗函数作⽤域上的变量和参数的引⽤,直⾄通过作⽤域链上全局作⽤域,基本上闭包是在声明函数时创建的作⽤域。
// 全局作⽤域
var globalVar = "abc";
function a(){
console.log(globalVar);
}
家园合作
a(); // "abc"
21. JavaScript 中的虚值是什么?潘玮柏国籍
虚值就是是在转换为布尔值时变为 fal 的值
22. 如何检查值是否虚值?
使⽤ Boolean 函数或者 !! 运算符。
23. ‘u strict’ 是⼲嘛⽤的
“u strict” 是 ES5 特性,它使我们的代码在函数或整个脚本中处于严格模式。严格模式帮助我们在代码的早期避免 bug,并为其添加限制。
24. JavaScript 中 this 值是什么?
this指的是当前正在执⾏或调⽤该函数的对象的值。this值的变化取决于我们使⽤它的上下⽂和我们在哪⾥使⽤它
25. 对象的 prototype(原型) 是什么?
原型就是对象的蓝图。如果它存在当前对象中,则将其⽤作属性和⽅法的回退。它是在对象之间共享属性和功能的⽅法,这也是JavaScript 实现继承的核⼼。
26. 什么是 IIFE,它的⽤途是什么?
IIFE或⽴即调⽤的函数表达式是在创建或声明后将被调⽤或执⾏的函数。创建IIFE的语法是,将function (){}包裹在在括号()内,然后再⽤另⼀个括号()调⽤它,如:(function(){})()
27. Function.prototype.apply ⽅法的⽤途是什么?
apply() ⽅法调⽤⼀个具有给定this值的函数,以及作为⼀个数组(或类似数组对象)提供的参数
const details = {
message: 'Hello World!'
};
function getMessage(){
ssage;
}
getMessage.apply(details); // 'Hello World!'
26. Function.prototype.call ⽅法的⽤途是什么?
call() ⽅法使⽤⼀个指定的 this 值和单独给出的⼀个或多个参数来调⽤⼀个函数。
27. Function.prototype.apply 和 Function.prototype.call 之间有什么区别?
apply()⽅法可以在使⽤⼀个指定的 this 值和⼀个参数数组(或类数组对象)的前提下调⽤某个函数或⽅法。call()⽅法类似于apply(),不同之处仅仅是call()接受的参数是参数列表。
28. Function.prototype.bind 的⽤途是什么?
bind() ⽅法创建⼀个新的函数,在 bind() 被调⽤时,这个新函数的 this 被指定为 bind() 的第⼀个参数,⽽其余参数将作为新函数的参数,供调⽤时使⽤。
32. 什么是⾼阶函数?
⾼阶函数只是将函数作为参数或返回值的函数。
33. ⼿动实现 Array.prototype.map ⽅法
map() ⽅法创建⼀个新数组,其结果是该数组中的每个元素都调⽤⼀个提供的函数后返回的结果。
34. ⼿动实现Array.prototype.filter⽅法
filter() ⽅法创建⼀个新数组, 其包含通过所提供函数实现的测试的所有元素。
35. ⼿动实现duce⽅法
reduce() ⽅法对数组中的每个元素执⾏⼀个由您提供的reducer函数(升序执⾏),将其结果汇总为单个返回值。
36. arguments 的对象是什么?
arguments对象是函数中传递的参数值的集合。它是⼀个类似数组的对象,因为它有⼀个length属性,我们可以使⽤数组索引表⽰法arguments[1]来访问单个值,但它没有数组中的内置⽅法,如:forEach、reduce、filter和map。
37. 如何创建⼀个没有 prototype(原型)的对象?
const o1 = {};
console.String()); // [object Object]
const o2 = ate(null);
console.String());
// throws an String is not a function
30. var,let和const的区别是什么?
var声明的变量会挂载在window上,⽽let和const声明的变量不会:
var声明变量存在变量提升,let和const不存在变量提升:
let和const声明形成块作⽤域
同⼀作⽤域下let和const不能声明同名变量,⽽var可以
31. 什么是箭头函数?
英雄梦
箭头函数表达式的语法⽐函数表达式更简洁,并且没有⾃⼰的this,arguments,super或new.target。箭头函数表达式更适⽤于那些本来需要匿名函数的地⽅,并且它不能⽤作构造函数。
32. 什么是类?
类(class)是在 JS 中编写构造函数的新⽅法。它是使⽤构造函数的语法糖,在底层中使⽤仍然是原型和基于原型的继承。
33. 什么是模板字符串?
模板字符串是在 JS 中创建字符串的⼀种新⽅法。我们可以通过使⽤反引号使模板字符串化。
34. 什么是对象解构?
对象析构是从对象或数组中获取或提取值的⼀种新的、更简洁的⽅法。假设有如下的对象:
35. 什么是 ES6 模块?
模块使我们能够将代码基础分割成多个⽂件,以获得更⾼的可维护性,并且避免将所有代码放在⼀个⼤⽂件中。在 ES6 ⽀持模块之前,有两个流⾏的模块。
48. 什么是Set对象,它是如何⼯作的?
Set 对象允许你存储任何类型的唯⼀值,⽆论是原始值或者是对象引⽤。
49. 什么是回调函数?
回调函数是⼀段可执⾏的代码段,它作为⼀个参数传递给其他的代码,其作⽤是在需要的时候⽅便调⽤这段(回调函数)代码。
50. Promi 是什么?
Promi 是异步编程的⼀种解决⽅案:从语法上讲,promi是⼀个对象,从它可以获取异步操作的消息;从本意上讲,它是承诺,承诺它过⼀段时间会给你⼀个结果。promi有三种状态:pending(等待态),fulfiled(成功态),rejected(失败态);状态⼀旦改变,就不会再变。创造promi实例后,它会⽴即执⾏。
36. 什么是 async/await 及其如何⼯作?
使⽤ Promi
function callApi() {
return fetch("url/to/api/endpoint")
.then(resp => resp.json())
.then(data => {
//do something with "data"
}).catch(err => {
//do something with "err"
});
}
在async/await,我们使⽤ tru/catch 语法来捕获异常。
async function callApi() {
try {
const resp = await fetch("url/to/api/endpoint");
const data = await resp.json();
//do something with "data"
} catch (e) {
//do something with "err"
}
}
52. 展开(spread )运算符和剩余(Rest) 运算符有什么区别?
展开运算符(spread)是三个点(…),可以将⼀个数组转为⽤逗号分隔的参数序列
function add(a, b) {
return a + b;
};
红酒怎么选
const nums = [5, 6];
const sum = add(...nums);
console.log(sum);
53. 什么是默认参数?

本文发布于:2023-07-15 04:25:39,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1097309.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:函数   对象   元素
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图