深入理解Javascript原型和闭包(1)——一切都是对象

“一切都是对象”这句话的重点在于如何去理解“对象”这个概念。

当然,也不是所有的都是对象,值类型就不是对象。

JS中一个常用的操作符——typeof用来判断数据类型

 1 function show(x) {
 2 
 3             console.log(typeof x);    // undefined
 4             console.log(typeof 10);   // number
 5             console.log(typeof 'abc'); // string
 6             console.log(typeof true);  // boolean
 7 
 8             console.log(typeof function () {});  //function
 9 
10             console.log(typeof [1, 'a', true]);  //object
11             console.log(typeof { a: 10, b: 20 });  //object
12             console.log(typeof null);  //object
13             console.log(typeof new Number(10));  //object
14         }
15         show();

从以上代码可以看出,undefined、number、string、boolean、null属于简单的值类型,不是对象剩下的几种情况——function、array、object都是对象,他们都是引用类型。

判断一个变量是不是对象很简单。值类型的判断用typeof,引用类型的判断用instanceof。

1 var fn = function () { };
2 console.log(fn instanceof Object);  // true

对象——若干属性的集合

JS里面数组是对象,函数是对象,对象还是对象。对象里面的一切都是属性,只有属性,没有方法。那对象里的方法如何表示呢?方法也是一种属性,因为它的属性表示为键值对的形式。

同时,js里的对象可以任意的扩展属性,没有class的约束。

上面代码中,obj是一个自定义的对象,其中a,b,c就是他的属性,而且c的属性值还是一个对象,它又有name、year两个属性。

但函数跟数组不是这样定义属性的,以函数为例:

 1         var fn = function () {
 2             alert(100);
 3         };
 4         fn.a = 10;
 5         fn.b = function () {
 6             alert(123);
 7         };
 8         fn.c = {
 9             name: "王福朋",
10             year: 1988
11         };

上面代码中,函数作为对象呗赋值了a,b,c三个属性。

一切引用类型都是对象,对象是属性的集合

原文地址:https://www.cnblogs.com/endlessmy/p/8547953.html