JavaScript 如何检查提供的值是否是由Object构造函数创建的对象
在本文中,我们将学习如何检查提供的值是否是由Object构造函数在JavaScript中创建的对象。除了原始值,几乎所有JavaScript中的值都是对象。
有几种方法可以用来检查提供的值是否是由Object构造函数创建的对象。
- 使用instanceof运算符
- 使用Object.prototype.toString.call()方法
- 使用Object.getPrototypeOf()
- 使用类型检查和构造函数属性的组合
方法1:使用instanceof运算符
instanceof运算符测试一个对象的原型链是否包含构造函数的原型对象。它检查提供的值是否是指定构造函数或其派生类的实例。
示例: 在此示例中,我们使用了上述解释的方法。
function isObjectInstanceof(value) {
return value instanceof Object;
}
// Test cases
const object1 = {};
const object2 = new Object();
const array = [];
const date = new Date();
const number = 42;
console.log(isObjectInstanceof(object1));
console.log(isObjectInstanceof(object2));
console.log(isObjectInstanceof(array));
console.log(isObjectInstanceof(date));
console.log(isObjectInstanceof(number));
// false (numbers are not objects)
输出
true
true
true
true
false
方法2:使用Object.prototype.toString.call()方法
使用Object.prototype.toString.call()方法,可以检索内部的[[Class]]属性,并将其与”[object Object]”进行比较,从而验证所提供的值是否是由Object构造函数创建的对象。
示例: 在此示例中,我们使用了上述解释的方法。
function isObjectCreatedByObjectConstructor(value) {
return Object.prototype.toString.call(value) ===
'[object Object]';
}
// Test cases
const object1 = {};
const object2 = new Object();
const array = [];
const date = new Date();
const number = 42;
console.log(
isObjectCreatedByObjectConstructor(object1));
// true
console.log(
isObjectCreatedByObjectConstructor(object2));
// true
console.log(
isObjectCreatedByObjectConstructor(array));
/* false (arrays are objects, but not
created by Object constructor) */
console.log(
isObjectCreatedByObjectConstructor(date));
/* false (dates are objects, but not
created by Object constructor) */
console.log(
isObjectCreatedByObjectConstructor(number));
// false (numbers are not objects)
输出
true
true
false
false
false
方法3:使用 Object.getPrototypeOf()
使用 Object.getPrototypeOf(),我们可以检索提供对象的原型,如果它与 Object.prototype 匹配,我们可以验证该值是否是由 Object 构造函数创建的对象。
示例: 在这个例子中,我们有一个函数 isObjectCreatedByObjectConstructor,它使用 Object.getPrototypeOf() 检查提供的值是否是由 Object 构造函数创建的对象。
function isObjectCreatedByObjectConstructor(value) {
return Object.getPrototypeOf(value) ===
Object.prototype;
}
// Test cases
const object1 = {};
const object2 = new Object();
const array = [];
const date = new Date();
const number = 42;
console.log(
isObjectCreatedByObjectConstructor(object1));
// true
console.log(
isObjectCreatedByObjectConstructor(object2));
// true
console.log(
isObjectCreatedByObjectConstructor(array));
/* false (arrays are objects, but not
created by Object constructor) */
console.log(
isObjectCreatedByObjectConstructor(date));
/*false (dates are objects, but not
created by Object constructor)*/
console.log(isObjectCreatedByObjectConstructor(number));
// false (numbers are not objects)
输出
true
true
false
false
false
方法4: 结合类型检查和构造函数属性
此方法涉及多个检查: 它确保值是一个对象(而不是null或其他原始类型)并且它的构造函数是Object构造函数。
示例: 在这个示例中,我们有一个函数isObjectCreatedByObjectConstructor,它使用一系列检查来检查提供的值是否是由Object构造函数创建的对象。
function isObjectCreatedByObjectConstructor(value) {
return value !== null && typeof value === 'object'
&& value.constructor === Object;
}
// Test cases
const object1 = {};
const object2 = new Object();
const array = [];
const date = new Date();
const number = 42;
console.log(isObjectCreatedByObjectConstructor(object1));
// true
console.log(isObjectCreatedByObjectConstructor(object2));
// true
console.log(isObjectCreatedByObjectConstructor(array));
/* false (arrays are objects, but not
created by Object constructor) */
console.log(isObjectCreatedByObjectConstructor(date));
/* false (dates are objects, but not
created by Object constructor) */
console.log(isObjectCreatedByObjectConstructor(number));
// false (numbers are not objects)
输出
true
true
false
false
false
极客教程