你们知道的JS不是面向对象的语言,就没有面向对象的继承的概念。那么原型就是用来弥补JS继承功能的。javascript
值类型名 | 特别说明 |
---|---|
number | NaN |
boolean | |
string | |
object | null |
function | |
undefined | 默认初始化 |
symbol | Symbol() ES6引入 |
一切引用类型都是Object
// 代码1 console.log(typeof(x)); // undefined console.log(typeof(10)); // number console.log(typeof('abc')); // string console.log(typeof(true)); // boolean console.log(typeof(function () { })); //function console.log(typeof([1, 'a', true])); //object console.log(typeof ({ a: 10, b: 20 })); //object console.log(typeof (null)); //object console.log(typeof (new Number(10))); //object
// 代码2 function ABC() {} var abc = new ABC() console.log(abc instanceof ABC) //true console.log(abc instanceof Object) //true console.log(ABC instanceof Function) //true console.log(ABC instanceof Object) //true console.log(Function instanceof Object) //true console.log(abc instanceof Function) //false console.log(Object instanceof Function) //true
由代码1和代码2可知:
typeof是用来判断值类型,
instanceof是用来追寻祖宗血脉的。java
原本看着代码2,能够寻迹这一条线,用来理清JavaScript对象的实例关系。
abc -> ABC -> Function -> Object -> Function ? 怎么最后出现循环实例化链?这不是要死循环?code
其实,Function和Object的关系有点像鸡和鸡蛋的关系。(那就下一个笔记再来讨论)对象