前言:
JavaScript 除了null和undefined之外,其他变量都可以当做对象使用。
JavaScript 的基本数据类型有:number boolean string null undefined ,其他所有值都是对象。
JavaScript 的 typeof 只能判断 number boolean string undefined function object 不能判断一些具体的对象类型和null。
如果要判断对象的具体类型则要使用 Object.prototype.toString.apply(aaa) === "[Object Array]" 来判断,或者根据该对象的特有性质判断,如Array对象有一个特殊属性length。
JavaScript 的顶层函数(对象),Array,RegExp,Date,String,Object,Function等有prototype属性。
Array , RegExp ,Date ,String, Function 都会继承 Object.prototype中的属性和方法。而Object.prototype.__proto__ 为null。
JavaScript 的对象创建:
1.由构造函数创建的对象继承自创建该对象的构造函数的prototype
1.1 var a = new Object(obj);
对象 a 会对对象obj进行浅复制,即对象a可以引用对象 obj 中的方法和属性,但是a的原型继承指向的是 Object.prototype。此外,对象a可以修改对象 obj中的属性和方法。
1.2 var a = Object.create(obj);
对象a的原型继承指向obj,a可以引用obj对象中定义的属性和方法,但是不能对obj中的属性和方法进行修改,当a对obj中的属性和方法赋值时,相当于在对象a中定义属性和方法。
1.3 var FF = function(){}; var a = new FF();
此时对象a的原型继承指向 FF的prototype.
2.由对象字面量创建的对象
2.1 var a = [];
对象a 继承自 Array.ptototype
2.2 var a ={};
对象a指向 Object.prototype.
总结:所有的对象都有隐藏的__proto__属性,所有的函数都有__proto__之外,还有一个prototype对象属性。