Js面试题整理

src和href的区别

  1. href是指向网络资源所在位置,建立和当前元素(锚点)或当前文档(链接)之间的链接,用于超链接。
  2. src是指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置。

    1. 在请求src资源时会将其指向的资源下载并应用到文档内,例如js脚本,img图片和frame等元素。
    2. 当浏览器解析到该元素时,会暂停其他资源的下载和处理,直到将该资源加载、编译、执行完毕,图片和框架等元素也如此,类似于将所指向资源嵌入当前标签内。这也是为什么将js脚本放在底部而不是头部。
    

观察者和订阅-发布的区别

  1. 观察者模式里,只有两个角色 —— 观察者 + 被观察者
  2. 而发布订阅模式里,却不仅仅只有发布者和订阅者两个角色,还有一个经常被我们忽略的 —— 经纪人Broker

往更深层次讲:
观察者和被观察者,是松耦合的关系
发布者和订阅者,则完全不存在耦合

从使用层面上讲:
观察者模式,多用于单个应用内部
发布订阅模式,则更多的是一种跨应用的模式(cross-application pattern),比如我们常用的消息中间件

delete数组的item,数组的length是否会 -1

只是被删除的元素变成了 undefined 其他的元素还是不变,也就是说数组长度没变

给出 ['1', '3', '10'].map(parseInt) 执行结果

parseInt(string, radix)

string:需要转化的字符,如果不是字符串会被转换,忽视空格符。
radix:数字2-36之间的整型。默认使用10,表示10进制。这个参数的意义是指把前面的字符看作多少进制的数字,所谓的基数。

如果radix在2-36之外会返回NaN。
在没有指定基数,或者基数为0的情况下,javascript作如下处理:

  1. 如果字符串string以 “0x” 或者 “0X” 开头,则基数是16,16进制;
  2. 如果字符串string以 “0” 开头,基数是8(8进制)或者10(10进制),根据实现环境决定。
  3. 如果字符串string 以其他任何值开头,则基数是10,10进制。

Proxy 相比于 defineProperty 的优势

Async/Await 如何通过同步的方式实现异步

https://es6.ruanyifeng.com/#docs/generator-async

箭头函数可以new吗?为什么?

箭头函数、没有prototype、没有自己的this指向、不可以使用arguments、自然不可以new。
如果new的时候会报错 function is not a constructor

异步队列

https://github.com/Advanced-F...

一个iframe,内嵌了一个A页面,iframe的宽高不停变化,如何让A页面的宽高实时自适应这个iframe的宽高大小。请说出至少3种方法,越难越好

解释一下在js里,0.1 0.2为什么等于0.30000000000000004,如何通过代码解决这个问题?

如何避免重绘或者重排?

  1. 当 DOM 元素的属性发生变化 (如 color) 时, 浏览器会通知 render 重新描绘相应的元素, 此过程称为 repaint。
  2. 如果该次变化涉及元素布局 (如 width), 浏览器则抛弃原有属性, 重新计算并把结果传递给 render 以重新描绘页面元素, 此过程称为 reflow。
  3. 回流必定会发生重绘,重绘不一定会引发回流。

typeof和instanceof 区别

instanceof 运算符用来检测 constructor.prototype 是否存在于参数的原型链上
typeof操作符返回一个字符串,指示未经计算的操作数的类型。

谈谈变量提升?

1. 只有声明本身会被提升,而赋值或其他运行逻辑会留在原地。
2. 每个作用域都会进行提升操作。
3. 函数声明会被提升,但是函数表达式却不会被提升。
4. 函数声明和变量声明都会被提升,是函数会首先被提升,然后才是变量。
5. let和const进行的声明不会在块作用域中进行提升。

defer和async区别

defer

  1. 浏览器开始解析 HTML 网页。
  2. 解析过程中,发现带有defer属性的

你可能感兴趣的:(面试)