马上又要开始新的一轮毕业季了,提前为大家准备一些自己理解的面试题

405 阅读3分钟

1、怎么判断两个对象相等?

1、Object.is(obj1, obj3) //true

2、JSON.stringify(obj1)==JSON.stringify(obj2)//true

3、函数传参利用object.keys()将函数转换为键值对数组,然后再判断两个数组长度是否相等,不相等return false,相等继续用for in 值是否相等 相等return  false

4、递归也是利用keys转数组,然后在判断

2、JavaScript 中怎么获取当前日期的月份?(必会)

1、Let  math= date.getMonth() + 1;

3、什么是类数组(伪数组),如何将其转化为真实的数组?(必会)

1、有length  2、有索引值 3、但是没有数组的push方法

2、转真数组

1 Array.from()

2 [].slice.call(eleArr)

3 Array.prototype.slice.call(eleArr)

4、如何遍历对象的属性?****

1 Object.keys() 将对象的属性名转换为数组

2 For  in

3 Object.getOwnPropertyNames()

4 for each

 

5、JavaScript 中的作用域、预解析与变量声明提升?

作用域 :****

1 全局作用域  let var const 声明的变量就是全局作用域

2局部作用域  函数声明的是局部

3 块级作用域  在()里面使用的变量就是块级,if等

预解析 ****

1 把变量或函数的声明提升到当前作用域的最前面

2 先提升 function,在提升 var

变量提升 ****

定义变量时,声明会被提升到作用域的最上面,变量的赋值不会

函数提升:JavaScript 解析器首先会把当前作用域的函数声明提前到整个作用域的最前面

 

6、变量提升与函数提升的区别?****

代码执行前引擎会先进行预编译,期间会将变量声明与函数声明提升至对应作用域的最顶端,函数内声明的变量只会提升至该函数作用域最顶层,如果外面有相同变量,那么函数体内的这个变量就会被上升到最顶端

 

7、函数提升

函数提升只会提升函数声明式写法,函数表达式的写法不会

函数提升的优先级大于变量提升的优先级

 

 

8、什么是作用域链?

默认情况下,js代码会处于全局作用域(顶级/0级),当声明函数之后就会开辟一个局部作用域(1级)不同的作用域可以有相同的声明。在函数里还可以开辟函数空间(2级作用域)依次类推下去,这种就叫作用域链

 

 

9、如何延长作用域链?

有些语句可以在作用域链的前端临 时增加一个变量对象,该变量对象会在代码执行后被移除

1 try - catch:会创建一个新的变量对象,包含的是被抛出的错误对象的声明

2 with 语句:with 语句会将指定的对象添加到作用域链中

 

 

10、判断一个值是什么类型有哪些方法?

typeof ,instanceof 、Object.prototype.toString.call

 

 

11、如何实现数组的随机排序?

1 函数,for循环和while循环

2 Math.random() - 0.5

 

 

12、src 和 href 的区别是?(了解)

src(source)指向外部资源的位置,请求资源时会将其指向的资源下载并应用到文档中

Href:指向网络资源所在位置,建立和当前元素(锚点)