在 JavaScript 中,我们可以使用 typeof
操作符来获取一个值的类型。然而,当我们想要获取一个对象的确切类型时,typeof
的结果将会是 "object"
。因此,我们需要使用其他方法来获取对象类型的名称。
使用 Object.prototype.toString()
使用 Object.prototype.toString()
方法是获取对象类型的常用方式。该方法返回一个表示对象类型的字符串。例如:
const myString = "Hello World"; console.log(Object.prototype.toString.call(myString)); // 输出:"[object String]" const myArray = [1, 2, 3]; console.log(Object.prototype.toString.call(myArray)); // 输出:"[object Array]" const myObject = { name: "John", age: 30 }; console.log(Object.prototype.toString.call(myObject)); // 输出:"[object Object]"
从上面的示例中可以看出,Object.prototype.toString()
返回的字符串格式为 [object 类型]
,其中 类型
就是我们要获取的对象类型的名称。
但是,由于 Object.prototype.toString()
是一个通用方法,它也可以被某些对象重写。因此,在某些情况下,该方法可能不能正确地识别对象类型。
使用 instanceof 操作符
另一种获取对象类型的方法是使用 instanceof
操作符。instanceof
可以用于检查某个对象是否是某个类的实例。例如:
const today = new Date(); console.log(today instanceof Date); // 输出:true const myArray = [1, 2, 3]; console.log(myArray instanceof Array); // 输出:true const myObject = { name: "John", age: 30 }; console.log(myObject instanceof Object); // 输出:true
从上面的示例中可以看出,instanceof
可以正确地识别对象的类型。但是,该方法只能用于检查对象是否是某个类的实例,不能用于获取对象类型的名称。
使用 constructor 属性
每个 JavaScript 对象都有一个 constructor
属性,该属性引用了创建该对象的构造函数。因此,我们可以使用 constructor.name
来获取对象类型的名称。例如:
const myString = "Hello World"; console.log(myString.constructor.name); // 输出:"String" const myArray = [1, 2, 3]; console.log(myArray.constructor.name); // 输出:"Array" const myObject = { name: "John", age: 30 }; console.log(myObject.constructor.name); // 输出:"Object"
与 Object.prototype.toString()
不同,constructor.name
是由对象的构造函数提供的,因此它更可靠。
需要注意的是,如果对象是通过字面量形式创建的,那么它的 constructor
属性将指向 Object
构造函数。因此,在这种情况下,我们需要使用其他方法来获取对象类型的名称。
示例代码
下面是一个完整的示例代码,展示了如何使用不同的方法来获取对象类型的名称:
-- -------------------- ---- ------- -------- ------------ - -- ---- --- ----- ------ ------- -- ------- --- --- --------- ------ ------ ---- ------ -------------------------------------------- ---- - ----- -------- - ------ ------- ------------------------------- -- ----------- ----- ------- - --- -- --- ------------------------------ -- ---------- ----- -------- - - ----- ------- ---- -- -- ------------------------------- -- -----------
在上面的示例代码中,我们定义了一个 getType()
函数,该函数可以获取任何对象的类型的名称。该函数首先检查对象是否为 null
,如果是,则返回 "null"
;然后检查对象是否为基本类型(如字符串、数字、布尔值等),如果是,则返回该类型的名称;最后,如果对象是复杂类型(如数组、对象等),则使用 Object.prototype.toString()
来获取对象类型的名称。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/7346