两者的作用
- typeof 运算符能区分原始值和对象,并检测出原始值的类型。
- instanceof 运算符可以检测一个对象是否是特定构造函数的一个实例。
typeof
值 | 结果 |
---|---|
undefined | 'undefined' |
null | 'object' |
布尔值 | 'boolean' |
数字 | 'number' |
字符串 | 'string' |
函数 | 'function' |
所有其他的常规值 | 'object' |
判断值是否为对象
判断一个值是否是对象,用 typeof 不准确,因为 null 也等于 'object'。
typeof null // object
typeof {} // object
排除掉 null:
function isObject(value) {
return value !== null && typeof value === "object";
}
isObject(null); // false
判断值是否存在
undefined 表示“没有值”(既不是原始值也不是对象)。访问未初始化的变量、缺失的参数,以及确实的属性会返回这个值。并且如果函数中没有任何显式的返回值时,也会返回 undefined。
function isDefined(value) {
return typeof value !== "undefined";
}
let x;
isDefined(x); // false
function f() { return; }
isDefined(f()); // false
isDefined(); // false
instanceof
对于 undefined、null,以及其他原始值都返回 false:
undefined instanceof Object // false
null instanceof Object // false
'abc' instanceof Object // false
123 instanceof Object // false
JavaScript 除了原始值以外的值的原型都是 Object:
[] instanceof Object // true
{} instanceof Object // true
isPrototypeOf(value)
value instanceof Const
instanceof 判断 value 是否由构造函数 Const 创建,所以,它检测 value 是否在 Const.prototype 的原型链上。因此下面的代码和 instanceof 是等价的:
Array.prototype.isPrototypeOf([]); // true
Object.prototype.isPrototypeOf([]); // true
Number.prototype.isPrototypeOf(new Number(123)); // true
几乎所有的对象都是 Object 的实例,也就是说这些对象的顶层原型都是 Object。Object 的原型是 null,因为它后面没有了。
标签:instanceof,判断,false,Object,value,typeof,null From: https://www.cnblogs.com/Enziandom/p/16653172.html