Javascript万物皆对象?
在javascript的世界里,有这么一句话,万物皆对象。
但是这个对象,应该怎么理解呢?
exm........??,难道值类型也是对象?!!
当然,不是。
准确地讲是对于“引用类型”而言。
那,在JavaScript的世界里,怎么区分“值类型”和“引用类型”呢?
哟呼,答案:typeof。
让我们一起写个demo,猜猜看typeofShow()会输出哪些结果。
1 <!DOCTYPE html> 2 <head> 3 <title>javascript</title> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 5 </head> 6 <body> 7 <script> 8 function typeofShow(){ 9 console.log( typeof x ); 10 console.log( typeof 1 ); 11 console.log( typeof '' ); 12 console.log( typeof true ); 13 console.log( typeof function(){} ); 14 console.log( typeof [] ); 15 console.log( typeof {} ); 16 console.log( typeof null ); 17 console.log( typeof new Number(1) ); 18 } 19 typeofShow(); 20 </script> 21 </body> 22 </html>
运行上面代码,打开chrome调试,得下效果图,你猜对了么?
从上图,可以看出,除开“值类型”,typeof输出的其他都是function和object,即“引用类型”。
但是刚才不是说到,引用类型都是对象么。。那typeof function(){} 输出的怎么是function,而不是object呢?
function到底是不是对象呢?
答案:function也是对象的,不信,我们利用instanceof来检验检验。
1 <!DOCTYPE html> 2 <head> 3 <title>javascript</title> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 5 </head> 6 <body> 7 <script> 8 function test(){}; 9 console.log( test instanceof Object); 10 </script> 11 </body> 12 </html>
下面是运行结果图
或者还记得函数function还有一种写法么,如下
var fn = new Function(“x”, “y”, “return x+ y ”);
这会信了吧。
通常的对象,一般是利用键值对表示的,例如下面这样:
1 var obj = { 2 one:[], 3 two:'', 4 three: function(){}, 5 four:{ 6 four1:'' 7 } 8 }
可是,那数组和函数不也是对象吗,他们也可以这样表示吗?
当然不可以,但它们可以采用另一种形式。如函数,可以这样:
1 function fn(){ 2 3 } 4 fn.a=[]; 5 fn.b=function(){}
总之,在javascript的世界里,对象就是属性的集合。