PS: 总结下相关知识点。
- 所有对象都是
new 函数出来的。{}只是语法糖。
比如说,
function obj(){
return {}
}
const newObj = new obj();
那这个对象newObj是通过new一个函数产生的,还是通过new一个对象产生的? 有人说这不明显吗?就是new了obj这个函数产生的啊。我们都知道new的这个函数是构造函数,那这个构造函数是obj吗?
看到了,这个构造函数是
Object。所以实际上是通过 new Object 产生的,这也就说通了{}是语法糖,实际的操作是new Object。
function obj() {
return new Object();
}
如果不 return,那实际new的就是obj这个函数,那得到的就是一个对象,这个构造函数是obj。
-
所有的函数也是对象。
函数呢,本质上是通过new一个
Function构造函数产生的。对于
Function就涉及到是先有鸡还是先有蛋的问题,函数是对象,也是通过new产生的,那Function呢?它比较特殊,是直接存放在内存里的。在js引擎启动的时候,直接把它放到内存里。
而对于
Object和Array,首字母大写嘛,所以很明显是个构造函数。
另外函数的本质 是对象,所以函数里面是可以有属性的。例如Array.isArray()、Number.isNaN()
-
所有对象都是引用类型
保存的是地址,赋值的也是地址。