typeof
typeof 操作符是比较常用的,用来确定一个变量的数据类型。typeof的规则:
- undefined: 值未定义
- boolean: 布尔值
- string: 字符串
- number: 数值
- object: 对象或 null
- function: 函数
instanceof
typeof 操作符用来检测基本数据类型非常方便,但是用来检测引用类型时就比较鸡肋了。
有时候我们并不是想知道某个值是不是对象,而是想知道它是什么类型的对象。 这时候,我们需要用的就是 instanceof 操作符。语法如下:
result = variable instanceof constructor
如果变量是给定的引用类型的实例,就会返回 true。
注意:
- 根据规定,所有引用类型的值都是 Object 的实例,因此在检测一个引用类型值和 Object 构造函数时,instanceof 操作符始终会返回 true。
- 如果用 instanceof 操作符检测基本数据类型的值,则始终会返回 false,因为基本类型不是对象。
- 如果存在继承关系,那么 " 子类实例 instanceof 父类 " 也会返回true
- 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