js面试宝典

1.some和 every区别?

    相同点:every和some都有三个参数,即item-当前项,index-当前项的索引值,array-数组本身;都可循环遍历数组
    不同点:every相当于逻辑关系中的且,只有所有参数都满足条件时,才返回true,一旦有一个不满足,则逻辑中断,返回false;some相当于逻辑关系中的或,只要有一个参数满足条件,就中断遍历,返回true,若遍历完所有参数,没有符合的项,返回false,通俗一点就是 every:一假即假,some:一真即真

2.find 和 findIndex区别?

find()函数用来查找目标元素,找到就返回该元素,找不到返回undefined。
findIndex()函数也是查找目标元素,找到就返回元素的位置,找不到就返回-1。

3.字符串常用的方法?

length():返回字符串的长度(字符的个数)。

charAt(index):返回指定索引位置处的字符。

substring(startIndex, endIndex):从字符串中提取指定索引范围内的子串。

indexOf(substring):返回指定字符串在原字符串中第一次出现的索引位置。

lastIndexOf(substring):返回指定字符串在原字符串中最后一次出现的索引位置。

startsWith(prefix):判断字符串是否以指定的前缀开始。

endsWith(suffix):判断字符串是否以指定的后缀结束。

toUpperCase():将字符串中的所有字母字符转换为大写。

toLowerCase():将字符串中的所有字母字符转换为小写。

concat(string):将指定字符串连接到原字符串的末尾。

trim():去除字符串两端的空白字符(空格、制表符等)。

replace(oldValue, newValue):将字符串中的指定内容替换为新的内容。

split(separator):根据指定的分隔符将字符串拆分为多个子串,并返回一个数组。

join(separator):将数组中的所有元素连接成一个字符串,使用指定的分隔符。

match(pattern):根据指定的正则表达式模式,在字符串中查找匹配的子串,并返回一个数组。

4.获取数组中出现次数最多的数

<script>
        function findMostFrequentNumber(arr) {
            let countMap = {};
            //记录目前出现的最大次数
            let maxCount = 0;
            // 记录目前的出现最多的数
            let mostFrequentNumber;
            // 遍历数组let num of arr
            for (let num of arr) {
                if (countMap[num]) {
                    countMap[num]++;
                } else {
                    countMap[num] = 1;
                }
                if (countMap[num] > maxCount) {
                    maxCount = countMap[num];
                    mostFrequentNumber = num;
                }
            }

            return {
                number: mostFrequentNumber,
                count: maxCount
            };
        }

        // 示例用法
        let numbers = [1, 3, 5, 3, 2, 1, 3, 5, 3];
        let mostFrequent = findMostFrequentNumber(numbers);
        console.log(mostFrequent); // 输出 { number: 3, count: 4 }
    </script>

5.js的垃圾回收机制?

6.字符串转换成数字的方法有哪些?

parseInt  第一个参数是数据  第二个参数是进制
Number() 函数是一个全局函数,可以将字符串转换为数字,包括整数和浮点数
parseFloat() 函数将字符串转换为浮点数。它也会从字符串的开头开始解析,直到遇到无法解析的字符为止。

7.什么是深拷贝和浅拷贝? 如何实现?

**深拷贝(Deep Copy)**是指在将一个对象或数组复制到一个新的变量时,不仅仅复制了对象本身,还复制了对象内部的所有嵌套对象和数组的内容,使得原对象和新对象完全独立,彼此之间互不影响。

**浅拷贝(Shallow Copy)**是指在将一个对象或数组复制到一个新的变量时,只复制对象或数组本身,而不复制对象或数组内部嵌套的引用类型数据。因此,原对象和新对象会共享引用类型数据的引用,对其中一个对象所做的修改可能会影响到另一个对象。


const originalObject = { name: 'John', age: 30 };
const shallowCopyObject = { ...originalObject };
Object.assign() 方法:

const originalObject = { name: 'John', age: 30 };
const shallowCopyObject = Object.assign({}, originalObject);
Array.prototype.slice() 方法(适用于数组):

const originalArray = [1, 2, 3];
const shallowCopyArray = originalArray.slice();

8.对闭包的优缺点?

优点:
访问父级作用域:闭包可以访问外部函数的变量和参数,即使外部函数已经执行完毕,也仍然可以访问这些变量和参数。
保护私有变量:通过闭包,我们可以创建私有变量,封装这些变量从而避免了全局变量的污染。
实现模块化:闭包可以用于实现模块化和代码封装,通过返回内部函数,可以选择性地暴露对象、函数或变量。
保存状态:闭包可以用于保存函数状态,内部函数可以访问并修改外部函数的变量,使得这些变量的值在多次调用之间得以保留和共享。
  缺点:
内存占用:闭包会引用外部函数的作用域,导致外部函数的变量无法被垃圾回收。如果闭包被过度使用,可能会导致内存泄漏和性能问题。
难以理解和调试:闭包涉及到多个作用域,嵌套的函数和变量之间的关系可能会变得复杂,使得代码难以阅读、理解和调试。
性能影响:由于闭包涉及到多层作用域的访问和变量引用,它的执行效率可能不如其他非闭包的解决方案

10.js事件机制?

1.事件监听器:通过addEventListener()方法可以向指定的元素或对象注册监听器,以便在特定事件发生时执行相应的处理函数。
2.事件处理函数:也称为事件回调函数,它是注册给特定事件的函数。当事件被触发时,相关的处理函数将被调用。
3.事件对象:在事件被触发时,相关的事件对象会被创建并传递给事件处理函数。事件对象包含与事件相关的属性和方法,开发者可以使用这些属性和方法来获取事件的详细信息。
4.事件冒泡和事件捕获:当一个元素上发生了某个事件,如果这个元素有父元素,该事件将逐级向上传播(冒泡)直到顶层文档对象。事件捕获是指从顶层文档对象向下寻找触发事件的元素。

11.new关键字具体做了那些事儿?

1.首先在函数内部创建一个空对象
2.把这个对象添加一个 [[Prototype]]属性 属性值 为函数对象的prototype属性值(原型对象)
3.把这个对象赋值给this 
4.执行函数中程序员写的代码
5.隐式的返回this

12.http状态码?

200 OK:成功处理了请求并返回了响应。
201 Created:成功创建了新资源。
204 No Content:服务器成功处理了请求,但没有返回任何内容。
400 Bad Request:(错误请求)服务器不理解请求的语法。
401 Unauthorized:表示发送的请求需要有通过HTTP认证的认证信息。
403 Forbidden:服务器拒绝请求。
404 Not Found:请求的资源在服务器上未找到。
500 Internal Server Error:服务器在处理请求时遇到了错误。

13.js中this的指向?

  1. ✨在全局环境中this指向window
  2. 📜在普通函数中 this指向 函数的调用者
  3. 📚在构造函数中 this指向 构建出来的实例对象
  4. 💡在事件的回调函数中 this指向当前操作的dom节点
  5. ⏰在一些全局函数中 settimeout setinterval this指向 window对象 但是在Node中是有变化的

15.eventloop事件循环?

16.promise的理解?

17.对象的方法

1.create: 创建一个对象
2、defineProperty:Object.defineProperty(object, prop, descriptor)定义对象属性
3、defineProperties
4、keys: 遍历可枚举的属性,
5、values: 遍历可枚举的属性值
6、Object.assign( target, source, source1 )
7、getPrototypeOf: 获取指定对象的原型(内部[[Prototype]]属性的值)
8、setPrototypeOf 设置一个指定的对象的原型
9、getOwnPropertyNames 与keys相似,但包含遍历包含不可枚举属性
10、getOwnPropertyDescriptor 获取该属性的描述对象
11、getOwnPropertyDescriptors 返回指定对象所有自身属性(非继承属性)的描述对象
12、entries 分割对象
13、is :它用来比较两个值是否严格相等,与严格比较运算符(===)的行为基本一致
14、preventExtensions 让一个对象变的不可扩展
15、seal 将一个对象密封 isSealed 判断一个对象是否为密封的
16、freeze 冻结一个对象&isFrozen 判断一个对象是否已经被冻结
17、hasOwnProperty
18、isPrototypeOf
19、propertyIsEnumerable 指定的属性是否可枚举
20、caller 返回当前函数的调用者
21、valueOf 需要返回对象的原始值
22、getOwnPropertySymbols在给定对象自身上找到的所有 Symbol 属性的数组
23、toString、 toLocalString
24、call apply bind、length、name 大家自己回去研究

18. for…in和for…of区别

  1. for…of
    只能遍历可迭代类型比如:数组 字符串 Set Map,在遍历的时候可以直接获取值
  2. for…in
    for…in遍历的是键,他不能直接获取循环的值,需要通过下标来获取
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值