JAVASCRIPT中有一句著名的话—“一切皆对象”;理解这句话的关键在于怎么理解“对象”。
当然,也不是所有都是对象,值类型就不是对象。
js里面的值类型包含(数值、布尔值、null、undefined),引用类型有(对象,数组,函数)。
如果我们不能确定一个变量的类型,通常会使用typeof操作符来获得它的类型
console.log(typeof 123); //number
console.log(typeof "abc"); //string
console.log(typeof true) //boolean
console.log(typeof null); //object
console.log(typeof undefined); //undefined
console.log(typeof [1,2,3,4]); //object
console.log(typeof {name:"jim"}); //object
console.log(typeof function(){}); //function
通过上面的代码,我们可知(number,string,boolean,undefined)都是值类型,剩下的(null,array,function,object)等等都是引用类型。
那么对象到底是什么呢?
对象——若干属性的集合。
java或者C#中的对象都是new一个class出来的,而且里面有字段、属性、方法,规定的非常严格。但是javascript就比较随意了——数组是对象,函数是对象,对象还是对象。
对象里面的一切都是属性,属性值可以是任意类型,如果属性值是函数的时候,我们就称这个属性为这个对象的方法;
对象里面都是键值对的表示形式,所以城对象是若干属性的集合。
var person = {
name:"oyakuki",
age:20,
say:function(){
console.log(this.name + "is saying")
}
}
上面的代码可能非常好理解,那么函数和数组也可以这样定义属性吗?——当然不行,但是它可以用另一种形式,总之函数/数组之流,只要是对象,它就是属性的集合。
var fn = function(){
console.log(123);
};
fn.a = 10;
fn.b = function(){
console.log
};
fn.c = {
name:"oyakuki",
age:20
};
在上面的代码中,fn作为函数,被赋予了a,b,c三个属性,fn很明显就是属性的集合啊,就是一个对象;
在jQuery源码中,“jQuery”或者“$”,这个变量其实是一个函数,不信你可以叫咱们的老朋友typeof验证一下。
console.log(typeof $) // function
所以只要记住:一切引用类型都是对象,对象是若干属性的集合。