JavaScript 如何检查提供的值是否是由Object构造函数创建的对象

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程