进程与线程区别?JS 单线程带来的好处?
- 进程描述了 CPU 在运行指令及加载和保存上下文所需的时间,放在应用上来说就代表了一个程序。线程是进程中的更小单位,描述了执行一段指令所需的时间
- 把这些概念拿到浏览器中来说,当你打开一个 Tab 页时,其实就是创建了一个进程,一个进程中可以有多个线程,比如渲染线程、JS 引擎线程、HTTP 请求线程等等。当你发起一个请求时,其实就是创建了一个线程,当请求结束后,该线程可能就会被销毁。
- JS单线程就是同一时间只能干一件事。这样做的目的是为了避免dom渲染的冲突。
new 的原理是什么?通过 new 的方式创建对象和通过字面量创建有什么区别?
new的过程
- 创建一个空对象
- 空对象通过__proto__指向原型函数
- 原型函数执行改变this
- 返回这个this
function myNew(){
let obj = {};
let constructor = [].shift.call(arguments);
obj.__proto__ = constructor.prototype;
let result = constructor.call(obj,arguments)
return result instanceof Object ? result : obj;
}
let animal = myNew(Animal,'xx')
复制代码
对于创建一个对象来说,更推荐使用字面量的方式创建对象(无论性能上还是可读性)。因为你使用 new Object() 的方式创建对象需要通过作用域链一层层找到 Object,但是你使用字面量的方式就没这个问题
instanceof 的原理是什么?
- instanceof 可以正确的判断对象的类型,因为内部机制是通过判断对象的原型链中是不是能找到类型的 prototype
为什么 0.1 + 0.2 != 0.3?如何解决这个问题?
由于js采用的是浮点数形式,因此0.1本质上是被截掉的。
parseFloat((0.1 + 0.2).toFixed(10)) === 0.3 // true
复制代码