typeof与instanceof的区别

typeof和instanceof都可以用来判断变量,它们的用法有很大区别:

  • typeof:返回一个变量的基本类型,检测的是基本数据类型
  • instanceof:返回的是一个布尔值,检测的是引用类型

typeof

typeof会返回一个变量的基本类型,只有以下几种:number,boolean,string,object,undefined,function;例:

1
2
3
4
5
6
7
console.log(typeof 1); // number
console.log(typeof "abc"); // string
console.log(typeof true); // boolean
console.log(typeof a); // undefined
console.log(typeof new Object()); // object
console.log(typeof null); // object
console.log(typeof []); // object

可以看到 typeof 无法判断数组、null,不管是数组还是对象,都会返回 object

更多方法具体可查看 《Javascript基础之数组》—数组检测方法

instanceof

instanceof返回的是一个布尔值,如:

1
2
3
4
var a = {};
console.log(a instanceof Object); // true
var b = [];
console.log(b instanceof Array); // true

instanceof操作符是检测对象的原型链是否指向构造函数的prototype对象,所以可以用来判断数组。

需要注意的是,instanceof只能用来判断对象和函数,不能用来判断字符串和数字等,如:

```
var b = ‘123’;
console.log(b instanceof String); // false
console.log(typeof b); // string

var c = new String(“123”);
console.log(c instanceof String); // true
console.log(typeof c); // object

更多格式转换技巧查看:格式转换 – Kindle伴侣