JS面试题汇总(二)(1),客户端开发面试题目答案

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Web前端全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024c (备注前端)
img

正文

return [1, 2];

}

};

console.log(obj + “”); //‘[object Object]’;

// 3;

var obj = {

valueOf: function() {

return [1, 2];

},

toString: function() {

return 1;

}

};

console.log(obj + “”); //‘1’;

// 4;

var obj = {

valueOf: function() {

return [1, 2];

},

toString: function() {

return [1, 2, 3];

}

};

console.log(obj + “”); // 报错 Uncaught TypeError: Cannot convert object to primitive value

拓展:

var arr = [new Object(), new Date(), new RegExp(), new String(), new Number(), new Boolean(), new Function(), new Array(), Math] console.log(arr.length) // 9

for (var i = 0; i < arr.length; i++) {

arr[i].valueOf = function() {

return [1, 2, 3]

}

arr[i].toString = function() {

return ‘toString’

}

console.log(arr[i] + ‘’)

}

1、若 return [1, 2, 3]处为 return “valueof”,得到的返回值是 valueof toString 7valueof

说明:其他八种复杂数据类型是先调用 valueOf 方法,时间对象是先调用 toString 方法

2、改成 return [1, 2, 3],得到的返回值是 9toString

说明:执行 valueof 后都来执行 toString

13. javascript 的 typeof 返回哪些数据类型

参考答案:

7 种分别为 stringbooleannumberObjectFunctionundefinedsymbol(ES6)、

示例:

1、number

typeof(10);

typeof(NaN); // NaN在JavaScript中代表的是特殊非数字值,它本身是一个数字类型。

typeof(Infinity)

2、boolean

typeof(true);

typeof(false);

3、string

typeof(“abc”);

4、undefined

typeof(undefined);

typeof(a); // 不存在的变量

5、object

// 对象,数组,null返回object

typeof(null);

typeof(window);

6、function

typeof(Array);

typeof(Date);

7、symbol

typeof Symbol() // ES6提供的新的类型

14. 一次js请求一般情况下有哪些地方会有缓存处理?

参考答案:

DNS缓存,CDN缓存,浏览器缓存,服务器缓存。

解析:

1、DNS缓存

DNS缓存指DNS返回了正确的IP之后,系统就会将这个结果临时储存起来。并且它会为缓存设定一个失效时间 (例如N小时),在这N小时之内,当你再次访问这个网站时,系统就会直接从你电脑本地的DNS缓存中把结果交还给你,而不必再去询问DNS服务器,变相“加速”了网址的解析。当然,在超过N小时之后,系统会自动再次去询问DNS服务器获得新的结果。

所以,当你修改了 DNS 服务器,并且不希望电脑继续使用之前的DNS缓存时,就需要手动去清除本地的缓存了。

本地DNS迟迟不生效或者本地dns异常等问题,都会导致访问某些网站出现无法访问的情况,这个时候我们就需要手动清除本地dns缓存,而不是等待!

2、CDN缓存

和Http类似,客户端请求数据时,先从本地缓存查找,如果被请求数据没有过期,拿过来用,如果过期,就向CDN边缘节点发起请求。CDN便会检测被请求的数据是否过期,如果没有过期,就返回数据给客户端,如果过期,CDN再向源站发送请求获取新数据。和买家买货,卖家没货,卖家再进货一个道理^^。

CDN边缘节点缓存机制,一般都遵守http标准协议,通过http响应头中的Cache-Control和max-age的字段来设置CDN边缘节点的数据缓存时间。

3、浏览器缓存

浏览器缓存(Browser Caching)是为了节约网络的资源加速浏览,浏览器在用户磁盘上对最近请求过的文档进行存储,当访问者再次请求这个页面时,浏览器就可以从本地磁盘显示文档,这样就可以加速页面的阅览。

浏览器缓存主要有两类:缓存协商:Last-modified ,Etag 和彻底缓存:cache-control,Expires。浏览器都有对应清除缓存的方法。

4、服务器缓存

服务器缓存有助于优化性能和节省宽带,它将需要频繁访问的Web页面和对象保存在离用户更近的系统中,当再次访问这些对象的时候加快了速度。

15. 列举 3 种强制类型转换和 2 种隐式类型转换

参考答案:

强制: parseInt(), parseFloat(), Number(), Boolean(), String()

隐式: +, -

解析:

// 1.parseInt() 把值转换成整数

parseInt(“1234blue”); // 1234

parseInt(“0xA”); // 10

parseInt(“22.5”); // 22

parseInt(“blue”); // NaN

// parseInt()方法还有基模式,可以把二进制、八进制、十六进制或其他任何进制的字符串转换成整数。基是由parseInt()方法的第二个参数指定的,示例如下:

parseInt(“AF”, 16); // 175

parseInt(“10”, 2); // 2

parseInt(“10”, 8); // 8

parseInt(“10”, 10); // 10

// 如果十进制数包含前导0,那么最好采用基数10,这样才不会意外地得到八进制的值。例如:

parseInt(“010”); // 8

parseInt(“010”, 8); // 8

parseInt(“010”, 10); // 10

// 2.parseFloat() 把值转换成浮点数,没有基模式

parseFloat(“1234blue”); // 1234.0

parseFloat(“0xA”); // NaN

parseFloat(“22.5”); // 22.5

parseFloat(“22.34.5”); // 22.34

parseFloat(“0908”); // 908

parseFloat(“blue”); // NaN

// 3.Number() 把给定的值转换成数字(可以是整数或浮点数),Number()的强制类型转换与parseInt()和parseFloat()方法的处理方式相似,只是它转换的是整个值,而不是部分值。示例如下:

Number(false) // 0

Number(true) // 1

Number(undefined) // NaN

Number(null) // 0

Number(“5.5”) // 5.5

Number(“56”) // 56

Number(“5.6.7”) // NaN

Number(new Object()) // NaN

Number(100) // 100

// 4.Boolean() 把给定的值转换成Boolean型

Boolean(“”); // false

Boolean(“hi”); // true

Boolean(100); // true

Boolean(null); // false

Boolean(0); // false

Boolean(new Object()); // true

// 5.String() 把给定的值转换成字符串

String(123) // “123”

// 6. + -

console.log(0 + ‘1’) // “01”

console.log(2 - ‘1’) // 1

16. 你对闭包的理解?优缺点?

参考答案:

概念:

闭包就是能够读取其他函数内部变量的函数。

三大特性:

  • 函数嵌套函数。

  • 函数内部可以引用外部的参数和变量。

  • 参数和变量不会被垃圾回收机制回收。

优点:

  • 希望一个变量长期存储在内存中。

  • 避免全局变量的污染。

  • 私有成员的存在。

缺点:

  • 常驻内存,增加内存使用量。

  • 使用不当会很容易造成内存泄露。

示例:

function outer() {

var name = “jack”;

function inner() {

console.log(name);

}

return inner;

}

outer()(); // jack

function sayHi(name) {

return () => {

console.log(Hi! ${name});

};

}

const test = sayHi(“xiaoming”);

test(); // Hi! xiaoming

虽然 sayHi 函数已经执行完毕,但是其活动对象也不会被销毁,因为 test 函数仍然引用着 sayHi 函数中的变量 name,这就是闭包。

但也因为闭包引用着另一个函数的变量,导致另一个函数已经不使用了也无法销毁,所以闭包使用过多,会占用较多的内存,这也是一个副作用。

解析:

由于在 ECMA2015 中,只有函数才能分割作用域,函数内部可以访问当前作用域的变量,但是外部无法访问函数内部的变量,所以闭包可以理解成“定义在一个函数内部的函数,外部可以通过内部返回的函数访问内部函数的变量“。在本质上,闭包是将函数内部和函数外部连接起来的桥梁。

17. 如何判断 NaN

参考答案:

isNaN()方法

解析:

最后

由于篇幅限制,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
部的变量,所以闭包可以理解成“定义在一个函数内部的函数,外部可以通过内部返回的函数访问内部函数的变量“。在本质上,闭包是将函数内部和函数外部连接起来的桥梁。

17. 如何判断 NaN

参考答案:

isNaN()方法

解析:

最后

由于篇幅限制,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

[外链图片转存中…(img-nJfOWRVN-1713034082255)]

[外链图片转存中…(img-ysERqq94-1713034082255)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-Gr2FGPxC-1713034082256)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值