JavaScript类型判断typeof和instanceof

原始类型存在堆中,引用类型存在栈中,引用类型存的是指向对象内存的指针。

原始类型有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面向对象初探——封装和继承

 

posted @ 2016-01-10 15:49  海绵小猪  阅读(676)  评论(0编辑  收藏  举报