JavaScript检测数据类型(typeof和instanceof)

typeof

typeof 操作符是比较常用的,用来确定一个变量的数据类型。typeof的规则:

  • undefined: 值未定义
  • boolean: 布尔值
  • string: 字符串
  • number: 数值
  • object: 对象或 null
  • function: 函数

instanceof

typeof 操作符用来检测基本数据类型非常方便,但是用来检测引用类型时就比较鸡肋了。

有时候我们并不是想知道某个值是不是对象,而是想知道它是什么类型的对象。 这时候,我们需要用的就是 instanceof 操作符。语法如下:

result = variable instanceof constructor

如果变量是给定的引用类型的实例,就会返回 true。

注意:

  1. 根据规定,所有引用类型的值都是 Object 的实例,因此在检测一个引用类型值和 Object 构造函数时,instanceof 操作符始终会返回 true。
  2. 如果用 instanceof 操作符检测基本数据类型的值,则始终会返回 false,因为基本类型不是对象。
  3. 如果存在继承关系,那么 " 子类实例 instanceof 父类 " 也会返回true
  4. Object 和 Function instanceof 自身会返回 true,而其他类型会返回 false。为什么会这样?

例如:

var person = {
    "name": "Talon",
    "age": "20"
};
var color = ["red", "blue", "green"];
var now = new Date();
function getName(obj) {
    if (obj.name) {
        return obj.name;
    }
};
alert(now);

alert(person instanceof Object); // true
alert(person instanceof Array); // false
alert(color instanceof Object); // true
alert(color instanceof Array);  // true
alert(getName instanceof Object);   // true
alert(getName instanceof Function); // true
alert(now instanceof Object);   // true
alert(now instanceof Date); // true
alert(person.age instanceof Object);    //flase

猜你喜欢

转载自blog.csdn.net/TalonZhang/article/details/84591337