微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

js面试题

1 js中let和const有什么用?

早期ECMAScript中使用var关键字创建变量,对变量类型没有区分,当然js语言的特点本身就是宽泛,也是相对简单易用的。后来在ES6中引入let,const这两种变量,let用于可变变量,const用于不可变变量,所以在实际开发中我们用let居多,对于不可变的api地址,资源数据用const。

2 js 作用域链是什么?有什么作用?

一般使用变量的时候,变量会在当前函数中取值,如果当前函数也就是当前作用域找不到,会向上级作用域中查值,直到找到全局作用域,这样查找的过程形成的链条就是作用域链。

作用域链的作用主要是为了解析变量的值,而不同的作用域中定义多个变量,就是是同一变量名的变量也不会相互干扰

3 如何将页面重定向到另一个页面?

window.location 作为全局变量的一个属性,主要用于获取当前页面的地址,其一改变location.herf的值,就可以改变页面地址,其二,localtion.replace方法专门替换页面地址。打开一个新页面使用location的open方法

4 JS中数组Array对象的splice方法和slice方法?

slice方法,从第一个参数作为开始位置,截取到第二个位置结束位置。

splice方法,从第一个参数开发位置,截取第二个位置作为长度。还有splice会改变原数组,slice不会

5 如何添加对象属性,删除对象属性?

obj.property_name = value; 添加对象属性

delete obj.property_name;删除对象属性

6 什么是promise?有哪些常用方法?

promise 承诺?promise是js中一种常见对象,是异步编程的一种解决方案,解决了传统方法回调。有三种状态,进行中,成功,失败。既然是承诺,那就存在promise.then方法,也就是承诺兑现,也存在promise.catch方法,也就是承诺不兑现。当然也存在promise.finally方法,不管兑现与否都要做的事。promise很常用,像axios请求,fetch请求本身也是promise对象,可以直接.then.catch获取返回结果。最常用用Promise.all方法,提供并行执行异步操作的能力。其他还知道race的用法用于只返回响应最快的异步程序,resolve方法用于将非promise对象转化为promise对象,reject方法也差不多。

7 数组去重的方法有哪些?

方法一:使用ES6的set,毕竟set存储的值总是唯一的,

let mySet = new Set();

mySet.add(1); // Set(1) {1}

mySet.add(5); // Set(2) {1, 5}

mySet.add(5);// Set(2) {1, 5} 这里体现了值的唯一性

[...new Set([1, 2, 2])] 即可去重

方法二:高阶函数filter

arr= [1, 2, 2]

newArr = arr.filter((item, index) =>arr.indexOf(item) == index)

方法三: 使用对象的属性key去重

arr.forEach(item => {

  if(!obj[item]) {

     obj[item] = true;  

  }

})

Object.keys(obj)

8 undefined, null和undeclared有什么区别

null表示没有对象,undefined表示缺少值,undeclared表示语法错误,没有声明就使用。

9 js的所有内置类型?以及基本类型和非基本类型的区别?

内置类型就是语言被设计时最基本的类型。和其他类型区别的是可以直接不用new定义实例。JS中有null, undefined, object, boolean, string, number, 以及es6新加的symbol,用来定义属性名。即使Symbol("KK") === Symbol("KK") 也是false。

其他六种属于基本类型,Obejct属于非基本类型Obecjt,Array,Function属于引用类型,

二者主要是存储的方式不一样,基本类型存放栈中,引用类型存放在堆中,栈的存取速度比堆快,仅次于寄存器,而JS中的自动回收机制也就是回收引用数据,当一个对象没有任何变量和属性对它进行引用时,它就应该被回收。否则这种对象就像垃圾一样占用内存,影响运行。

实际使用中:比较的时候,一个比较值,一个比较引用。

10 JS中的深拷贝和浅拷贝?

浅拷贝只是引用的拷贝,两个变量的值是同一个引用,也就是说一个变量改变数据,另一个变量的值也会跟着变化

深拷贝就是递归的复制新对象的值,两个变量不共享相同的属性。

11 延迟函数setTimeOut, 循环函数setInterval?

都是window对象的方法,接收两个参数,按照第二个参数时间执行第一个参数的函数。一个延迟执行,一个循环执行。

setInterval返回的值,可以用clearInterval()来停止函数来清除循环

setTimeOut返回的值,可以用clearTimeout() 来停止函数来清除延迟

12 ES6 有什么常用的新语法?

1 声明引入常量const,let.

2 作用域引入块级作用域

3 新增模板字符串,方法对字符串的操作

4 提供函数的参数默认值

5 提供对象和数组的展开运算符 [...item] {...item}

6 提供不定参数

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐