前端面试JS

前端面试JS目录 一 变量类型 1 值类型和引用类型 2 判断数据类型 typeof instanceof Object prototype toString call constructor 1 typeof 2 instanceof 3 Object prototype toString call 4

大家好,我是讯享网,很高兴认识大家。

目录

一、变量类型

1、值类型和引用类型

2、判断数据类型typeof、instanceof、Object.prototype.toString.call()、constructor

1)typeof

2)instanceof

3)Object.prototype.toString.call()

4)constructor

3、深拷贝与浅拷贝

4、“==”和“===”的区别

5、truely变量和falsely变量

6、let、const和var的概念与区别、变量提升与暂时性死区

7、变量的解构赋值

8、Symbol概念及其作用、应用场景

二、原型和原型链

1、原型和原型链、prototype与__proto__的关系与区别

2、class基本语法及继承

3、new的原理

4、new和Object.create的区别

三、作用域和闭包

1、作用域和作用域链、执行上下文

2、bind、call、apply的区别

3、如何正确判断this?

4、闭包及其作用

5、JS的垃圾回收机制

四、异步

1、概念

2、EventLoop事件循环/事件轮询、宏任务与微任务

3、Promise(Promise A+规范、手撕Promise.all、Promise.race、Promise相关API和方法)

4、async/await

5、Generator及其异步方面的应用

6、几种异步方式的比较(回调、Promise、Generator、async)

7、setTimeout用作倒计时为何会产生误差?

8、Iterator和for...of(Iterator遍历器的实现)

9、循环语法比较及使用场景(for、forEach、for...in、for...of)

10、defer和async的区别

五、JS Web API

1、DOM(Document Object Model)


讯享网

2、BOM(Browser Object Model)

3、事件绑定、事件冒泡、事件代理(事件委托)

4、ajax和跨域

1)Ajax的请求过程

2)跨域:同源策略及跨域实现方式和原理

5、存储Cookie、localStorage、sessionStorage

6、其他

1)JS中的String、Math和Array方法

2)类数组与数组的区别与转换

3)数组扁平化

4)数组去重

5) JavaScript中的arguments

6)箭头函数和普通函数的区别

7)函数柯里化及其通用封装

8)ES6新增特性

9)Set和Map数据结构


一、变量类型

1、值类型和引用类型

值类型(基本数据类型):Number、String、Boolean、Undefined、Null、Symbol、BigInt。直接存储在栈(stack)中,占用空间小、大小稳定。

引用类型:对象Object、数组Array、函数Function。存储在堆(heap)中,占用空间大,大小不固定。同时会在栈中存储一个该对象的堆内存地址(指针)。

Number类型:0.1+0.2!==0.3原因?Number类型取值范围?

Undefined和Null类型区别?

Null(空值)表示一个为空的对象;

Undefined(未定义)声明一个变量没有赋值

JavaScript中值类型和引用类型的区别:

1、值类型的值是不可变的;引用类型的值是可变的

2、值类型的变量是存放在栈;引用类型在栈中存放的是变量标识符以及变量所对应值的引用地址,而变量所对应的值被存放在堆中

3、值类型无法添加属性和方法;引用类型可以添加属性和方法

4、值类型拷贝变量的内容;引用类型拷贝引用地址

参考:JavaScript 原始值和引用值的各种区别

2、判断数据类型typeof、instanceof、Object.prototype.toString.call()、constructor

1)typeof

typeof 对于值类型来说,除了 null 都可以显示正确的类型;对于引用数据类型,除了函数之外,都会显示"object"

描述 结果
Undefined "undefined"
Null "object"
Boolean "boolean"
Number "number"
String "string"
Symbol "symbol"
BigInt "bigint"
Function "function"
Array "object"
Object "object"

参考:MDN

2)instanceof

instanceof用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性,其意思就是判断对象是否是某一数据类型(如Array)的实例。

js实现instanceof:

function myInstanceof(left,right){ var protoType=right.prototype var proto=left.__proto__ while(true){ if(proto===null){ return false } if(proto===protoType){ return true } proto=proto.__proto__ } }

讯享网

3)Object.prototype.toString.call()

4)constructor

constructor可以检测原始值类型,但是只会基于原型链上的直属类检测。

参考:typeof,instanceof,constructor,Object.prototype.toString.call()

3、深拷贝与浅拷贝

深拷贝和浅拷贝只针对 Object, Array 这样的引用类型。浅拷贝只复制一层对象的属性,而深拷贝则递归复制了所有层级。

深拷贝实现方式:

1、递归

讯享网function deepClone(obj={}){ if(obj==null || typeof obj!=='object'){ return obj } let result if(obj instanceof Array){ result=[] }else{ result={} } for(let key in obj){ //保证key不是原型的属性 if(obj.hasOwnProperty(key)){ //递归调用 result[key]=deepClone(obj[key]); } } return result }
小讯
上一篇 2025-02-23 12:55
下一篇 2025-03-24 11:35

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/116082.html