检查一个值是否是一个对象:
- 验证该值具有对象类型 -
typeof variable === 'object'
。 - 验证该值不为空 -
variable !== null
。 - 验证该值不是数组 -
!Array.isArray(variable)
。 - 如果所有条件都通过,则该值是一个对象。
const variable = {name: 'Tom'};
if (
typeof variable === 'object' &&
variable !== null &&
!Array.isArray(variable)
) {
console.log(' Value is an object');
} else {
console.log(' Value is not an object');
}
我们在语句中使用了 逻辑 AND (&&)运算符 来链接 3 个 if 条件。
所有条件都必须通过才能让我们的if块运行。
第一个条件使用 typeof 运算符来检查一个值的类型是否为"object"。
typeof运算符返回一个字符串,指示值的类型。这里有些例子。
console.log(typeof {}); // "object"
console.log(typeof []); // "object"
console.log(typeof null); // "object"
console.log(typeof function () {}); // "function"
console.log(typeof (() => {})); // "function"
console.log(typeof ''); // "string"
console.log(typeof 0); // "number"
注意
,数组和null值的类型也为"object" 。 为了确保该值不存储数组或 null,我们必须添加 2 个额外的检查。
我们的第二个条件检查该值是否不等于null。
第三个 - 该值不是数组。
如果所有条件都通过,我们可以断定该值是一个对象。
以下 3 种类型都具有 object 值:
- 对象字面量{}
- 数组[]
- 一个null值
另一种方法是使用 Object 类的 prototype 属性。
// true
console.log(Object.prototype.toString.call({}) === '[object Object]');
// false
console.log(Object.prototype.toString.call([]) === '[object Object]');
// false
console.log(Object.prototype.toString.call(null) === '[object Object]');
我们调用原型上的方法 toString(),传递给它一个对象、一个数组和null。
字符串化时,所有 3 个名称都不同:
// "[object Object]"
console.log(Object.prototype.toString.call({}));
// "[object Array]"
console.log(Object.prototype.toString.call([]));
// ️"[object Null]"
console.log(Object.prototype.toString.call(null));
对于不同类型的对象,都有自己的 toString() 方法。