对象的拷贝
== 和 === 有什么区别
== 和 === 运算符用于比较两个值是否相等,当然,它们对相等的定义不尽相同。两个运算符允许任意类型的操作数,如果操作数相等则返回true,否则返回false。那么关于== 和===有什么区别呢?让我们一起来探究。
‘===’恒等
===严格相等运算符,首先计算其操作数的值,然后比较这两个值,比较过程没有任何类型转换:
如果两个类型不相同,则它们不相等。例如:
1 | 1 === 'true' // false |
如果两个值都是null或者都是undefined,则它们相等。例如:
1 | null === undefined // false |
如果两个值都是布尔值true或者都是false,则它们相等。例如:
1 | true === true // true |
闭包
原型
今天说一下JS中原型和原型链,我理解的也不是很透彻,这边结合网上的一些文章,记录一下。
1. 原型 / 构造函数 / 实例
每个函数都有 prototype 属性,除了 Function.prototype.bind(),该属性指向原型。
每个对象都有proto属性,指向了创建该对象的构造函数的原型。其实这个属性指向了 [[prototype]],但是 [[prototype]] 是内部属性,我们并不能访问到,所以使用proto来访问。
对象可以通过proto来寻找不属于该对象的属性,proto将对象连接起来组成了原型链。
如果你想更进一步的了解原型,可以仔细阅读深度解析原型中的各个难点。
- 原型(prototype): 一个简单的对象,用于实现对象的 属性继承。可以简单的理解成对象的爹。在 Firefox 和 Chrome 中,每个JavaScript对象中都包含一个proto (非标准)的属性指向它爹(该对象的原型),可obj__proto__进行访问。
- 构造函数: 可以通过new来 新建一个对象 的函数。
- 实例: 通过构造函数和new创建出来的对象,便是实例。
- 实例通过proto指向原型,通过constructor指向构造函数。
可能有点懵逼,这里来举个栗子,以Object为例,我们常用的Object便是一个构造函数,因此我们可以通过它构建实例。
1 | // 实例 |
Promise
什么是 Promise?
Promise 是 JS 异步编程中的重要概念,异步抽象处理对象,是目前比较流行 Javascript 异步编程解决方案之一
有用过 promise 吗?请写出下列代码的执行结果,并写出你的理解思路:
1 | setTimeout(() => { |