JS面试问题

2021-06-08  本文已影响0人  一个记事本

1、在 js 中不同进制数字的表示方式

2、什么是堆?什么是栈?它们之间有什么区别和联系?

3、null 和 undefined 的区别?

4、isNaN 和 Number.isNaN 函数的区别?

Number('12aa') // NaN
isNaN('12aa') // true
Number.isNaN('12aa')  //false

5、其他值到布尔类型的值的转换规则?

6、解析字符串中的数字和将字符串强制类型转换为数字的返回结果都是数字,它们之间的区别是什么?

parseInt("123a") //123
parseInt("a123a") //NaN
Number("123") //123
Number("123a") //NaN

7、== 操作符的强制类型转换规则?

8、如何将字符串转化为数字,例如 '12.3'?

9、javascript 创建对象的几种方式?

我们一般使用字面量的形式直接创建对象,但是这种创建方式对于创建大量相似对象的时候,会产生大量的重复代码。但 js
和一般的面向对象的语言不同,在 ES6 之前它没有类的概念。但是我们可以使用函数来进行模拟,从而产生出可复用的对象
创建方式,我了解到的方式有这么几种:

10、JavaScript 继承的几种实现方式?

11、Javascript 的作用域链?

12、eval 是做什么的?

13、什么是 DOM 和 BOM?

14、阻止事件冒泡

15、什么是闭包,为什么要用它?

16、 instanceof 的作用?

//instanceof实现
function myInstanceof(left, right) {
  let proto = Object.getPrototypeOf(left), // 获取对象的原型
    prototype = right.prototype; // 获取构造函数的 prototype 对象

  // 判断构造函数的 prototype 对象是否在对象的原型链上
  while (true) {
    if (!proto) return false;
    if (proto === prototype) return true;

    proto = Object.getPrototypeOf(proto);
  }
}

17、如何判断一个对象是否继承某个类?

18、对于 JSON 的了解?

19、js 延迟加载的方式有哪些?

20、Ajax 是什么? 如何创建一个 Ajax?

1、创建一个 ajax 有这样几个步骤

2、首先是创建一个 XMLHttpRequest 对象。

3、然后在这个对象上使用 open 方法创建一个 http 请求,open 方法所需要的参数是请求的方法、请求的地址、是否异步和用户的认证信息。

4、在发起请求前,我们可以为这个对象添加一些信息和监听函数。比如说我们可以通过 setRequestHeader 方法来为请求添加头信息。我们还可以为这个对象添加一个状态监听函数。一个 XMLHttpRequest 对象一共有 5 个状态,当它的状态变化时会触发onreadystatechange 事件,我们可以通过设置监听函数,来处理请求成功后的结果。当对象的 readyState 变为 4 的时候,代表服务器返回的数据接收完成,这个时候我们可以通过判断请求的状态,如果状态是 2xx 或者 304 的话则代表返回正常。这个时候我们就可以通过 response 中的数据来对页面进行更新了。

5、当对象的属性和监听函数设置完成后,最后我们调用 sent 方法来向服务器发起请求,可以传入参数作为发送的数据体。

21、axios取消请求?应用哪些场景?

// 定义工厂方法
const CancelToken = axios.CancelToken;
const source = CancelToken.source();

axios.get('/user/12345', {
  cancelToken: source.token 
}).catch(function(thrown) {
  if (axios.isCancel(thrown)) {
    console.log('Request canceled', thrown.message);
  } else {
     // 处理错误
  }
});

axios.post('/user/12345', {
  name: 'new name'
}, {
  cancelToken: source.token
})

// 取消请求(message 参数是可选的)
source.cancel('Operation canceled by the user.');
const CancelToken = axios.CancelToken;
let cancel;

axios.get('/user/12345', {
  cancelToken: new CancelToken(function executor(c) {
    // executor 函数接收一个 cancel 函数作为参数,回调参数c做为取消请求涵数。
    cancel = c;
  })
});

// 取消请求
cancel();

22、谈一谈浏览器的缓存机制?

23、取消Ajax 浏览器缓存?

24、什么是浏览器的同源政策?

25、如何解决跨域问题?

相关知识点:

如果是像解决 ajax 无法提交跨域请求的问题,我们可以使用 jsonp、cors、websocket 协议、服务器代理来解决问题。

上一篇 下一篇

猜你喜欢

热点阅读