“一切皆对象”
当然也不是所有的都是对象,值类型(undefined,number,string,boolean)就不是对象;而函数、对象、数组、null、new Number(10)都是对象,它们都是引用类型。而判断一个变量是不是对象,值类型就用typeof、引用类型就用instanceof。
对象--属性的集合
java中的对象是new一个class出来,而且里面有属性、方法、字段,规定非常严格。而JavaScript中数组是对象、函数是对象、对象还是对象。对象里面的一切都是属性,只有属性没有方法。那么方法怎么表示呢?是的方法也是一种属性,它的属性表示为键值对的形式。
而且JavaScript中的对象可以任意的扩展属性,不受class的约束。
var obj={
a:10,
b:function(x){
alert(this.a+x)
}
c:{
name:"小明",
age:10
}
}
obj为一个自定义对象,a,b,c都是它的属性,而且c属性值是一个对象;对象可能比较好理解,那么函数和数组怎么定义呢?以函数为例
var fn=function(){
alert(100);
}
fn.a=100;
fn.b=function(){
alert(alert(1));
}
fn.c={
name:"小明",
age:10
}
在jQuery源码中,“jQuery”或者“$”,这个变量其实是一个函数,咱们常用的 $.trim() 也是个函数,很明显,这就是在$或者jQuery函数上加了一个trim属性,属性值是函数。
综合得出结论:一切(引用类型)都是对象,对象是属性的集合。
最后,有个疑问。在typeof的输出类型中,function和object都是对象,为何却要输出两种答案呢?都叫做object不行吗?——当然不行。