原始类型存在堆中,引用类型存在栈中,引用类型存的是指向对象内存的指针。
原始类型有5个:undefined、null、string、boolean、number。
JavaScript提供了typeof方法来判断值类型,原始类型对应的结果是undefined、object、string、boolean、number(typeof null 结果是object,这本是个历史错误但沿用成习惯),Function类型typeof的结果是function,其他引用类型的typeof结果皆为object。
1 var a = null; //obejct 2 var b ; //undefined 3 var c = "abc"; //string 4 var d = true; //boolean 5 var f = 1; //number 6 var g = {}; //object 7 var h = []; //object 8 var i = /s/; //object 9 var j =function(){}; //function 10 11 console.log(typeof a); 12 console.log(typeof b); 13 console.log(typeof c); 14 console.log(typeof d); 15 console.log(typeof f); 16 console.log(typeof g); 17 console.log(typeof h); 18 console.log(typeof i); 19 console.log(typeof j);
引用类型通常理解成类,Object可以说是所有类的基类。JavaScript中并没有显式出现类,叫对象。
本地对象
- Object
- Function
- Array
- String
- Boolean
- Number
- Date
- RegExp
- Error
- EvalError
- RangeError
- ReferenceError
- SyntaxError
- TypeError
- URIError
内置对象
- Global
- Math
宿主对象
- BOM和DOM的对象
instanceof判断对象实例
要判断不同对象,typeof已经无能为力了,到了instanceof的用武之地,它用来判断一个对象是否是另一个对象的实例。
1 console.log(new Object() instanceof Object); 2 console.log(new Function() instanceof Function); 3 console.log(new Array() instanceof Array); 4 console.log(new String() instanceof String); 5 console.log(new Boolean() instanceof Boolean); 6 console.log(new Number() instanceof Number); 7 console.log(new Date() instanceof Date); 8 console.log(new RegExp() instanceof RegExp);
上面显然结果都是true,此外除Object之外的所有对象instanceof Object都是true。
如果是自定义对象,instanceof自己和父类结果都会是true。父类指的是通过原型链继承的,可见我的JavaScript面向对象初探——封装和继承