在学习的过程中,我们常常能听到这样一句话:一切皆是对象。那么这句话该如何理解呢?
首先,我们要明确对象的概念。要明白除了基本数据类型都是对象。
typeof操作符是大家经常使用的,我们常用它来检测给定变量的数据类型。
1 var a; 2 console.log(typeof a); //undefined 3 console.log(typeof true); //boolean 4 console.log(typeof 'abc'); //string 5 console.log(typeof 12); //number 6 console.log(typeof null); //object,null被认为是一个空的对象引用 7 8 function fn (){ 9 var a = 10; 10 } 11 console.log(typeof fn); //function 12 console.log(typeof [1, 'aaa', false]); //object 13 console.log(typeof {name: 'lisi',age: 18}); //object
js中分两种数据类型
基本数据类型:Null, Boolean, Number, String, Undefined, Symbol(ES6)
引用数据类型:Object (在js中,除了基本数据类型都是对象,函数是对象,正则表达式也是对象)
函数在js中是对象,不是一种数据类型。但是函数有一些特殊的属性,所以通过typeof来区分函数和其他对象是有必要的。
判断一个变量是不是对象很简单,基本数据类型的判断用typeof, 引用数据类型的判断用instanceof.
var b = 123; if (typeof b == 'number') { console.log("number类型"); } var person = { name: 'zhangsan', age: 12 }; if(person instanceof Object){ console.log('Object类型的对象'); }
对象是属性的集合,属性可以包括基本值,对象或者函数。
1 //早期人们这样创建对象 2 var person = new Object(); 3 person.name = 'lisi'; 4 person.age = 12; 5 person.sayName = function (){ 6 alert(this.name); 7 }; 8 //现在常用字面量语法 9 var person = { 10 name: 'lisi', 11 age: 12, 12 sayName: function (){ 13 alert(this.name); 14 } 15 };
在上例中,创建了一个名为person的对象,并为它添加了两个属性(name,age)和一个方法属性( sayName() )。由此可见,对象是属性的集合。
还有一个问题,既然函数是对象,那么函数该怎样添加属性呢?
//函数添加属性 function fn (){ var a = 10; } fn.a = '123'; fn.b = function (){ alert('bbb'); }
总之,要理解一切都是对象,要明确两个概念。第一,除了基本数据类型都是对象;第二,对象是属性的集合,属性包括基本值、对象和函数。