JAVASCRIPT中有一句著名的話—“一切皆對象”呼寸;理解這句話的關(guān)鍵在于怎么理解“對象”。
當(dāng)然猴贰,也不是所有都是對象对雪,值類型就不是對象。
js里面的值類型包含(數(shù)值米绕、布爾值瑟捣、null、undefined)栅干,引用類型有(對象迈套,數(shù)組,函數(shù))碱鳞。
如果我們不能確定一個變量的類型桑李,通常會使用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出來的允华,而且里面有字段圈浇、屬性、方法靴寂,規(guī)定的非常嚴格磷蜀。但是javascript就比較隨意了——數(shù)組是對象,函數(shù)是對象百炬,對象還是對象褐隆。
對象里面的一切都是屬性,屬性值可以是任意類型剖踊,如果屬性值是函數(shù)的時候庶弃,我們就稱這個屬性為這個對象的方法;
對象里面都是鍵值對的表示形式德澈,所以城對象是若干屬性的集合歇攻。
var person = {
name:"oyakuki",
age:20,
say:function(){
console.log(this.name + "is saying")
}
}
上面的代碼可能非常好理解,那么函數(shù)和數(shù)組也可以這樣定義屬性嗎梆造?——當(dāng)然不行缴守,但是它可以用另一種形式,總之函數(shù)/數(shù)組之流,只要是對象屡穗,它就是屬性的集合贴捡。
var fn = function(){
console.log(123);
};
fn.a = 10;
fn.b = function(){
console.log
};
fn.c = {
name:"oyakuki",
age:20
};
在上面的代碼中,fn作為函數(shù)村砂,被賦予了a,b,c三個屬性烂斋,fn很明顯就是屬性的集合啊,就是一個對象础废;
在jQuery源碼中汛骂,“jQuery”或者“$”,這個變量其實是一個函數(shù)色迂,不信你可以叫咱們的老朋友typeof驗證一下香缺。
console.log(typeof $) // function
所以只要記住:一切引用類型都是對象歇僧,對象是若干屬性的集合。