在JavaScript中,我们可以使用typeof、instanceof、Object.prototype.toString()三种方式来判断一个对象的类型。
使用typeof
typeof
操作符可以用来判断一个对象的类型,但是它并不完全准确。例如,typeof null
返回的是object
,但是我们知道null并不是对象类型。
typeof null
// "object"typeof undefined
// "undefined"typeof "hello"
// "string"typeof 123
// "number"typeof true
// "boolean"typeof []
// "object"typeof {}
// "object"typeof function() {}
// "function"
从上面的例子中可以看出,typeof
可以识别常见的基本数据类型和函数类型,但是对于数组和对象等复合数据类型,返回的是"object"。
使用instanceof
instanceof
可以用来判断一个对象是否是某个类的实例。例如:
var a = []
a instanceof Array // true
function Color() {}
var b = new Color()
b instanceof Color // true
从上面的例子中可以看出,instanceof
可以精准地通过判断某个对象是否是某个类的实例。但是需要注意的是,当对象是原始类型的时候,这种方法并不适用。
var c = "hello"
c instanceof String // false
从上面的例子可以看出,因为"hello"
是字符串字面量,不是字符串对象,所以返回的是false。
使用Object.prototype.toString()
我们还可以使用Object.prototype.toString()
方法来判断对象的类型,该方法不同于前两种方法,它会返回一个字符串,按照 [object 类型]
的格式。
Object.prototype.toString.call(null) // "[object Null]"
Object.prototype.toString.call(undefined) // "[object Undefined]"
Object.prototype.toString.call("hello") // "[object String]"
Object.prototype.toString.call(123) // "[object Number]"
Object.prototype.toString.call(true) // "[object Boolean]"
Object.prototype.toString.call([]) // "[object Array]"
Object.prototype.toString.call({}) // "[object Object]"
Object.prototype.toString.call(function(){}) // "[object Function]"
从结果可以看出,Object.prototype.toString()
方法可以准确地识别类型,它可以返回对象的正确类型字符串。
示例说明
接下来我们以实际情况来说明一下JavaScript中怎么做对象的类型判断。
示例一:判断对象是不是数组类型
当我们需要判断一个对象是否是数组的时候,我们可以使用以下代码:
var arr = []
if (Object.prototype.toString.call(arr) === "[object Array]") {
console.log("arr is an Array.")
}
该代码通过调用Object.prototype.toString()
方法来返回一个字符串,该字符串的格式是[object Array]
。如果返回的结果与[object Array]
相等,则代表该对象是数组类型。
示例二:判断对象是否为函数类型
当我们需要判断一个对象是否为函数类型的时候,我们可以使用以下代码:
var fn = function() {}
if (typeof fn === "function") {
console.log("fn is a Function.")
}
该代码通过使用typeof
操作符来判断对象的类型,如果返回的结果是function
,则代表该对象是函数类型。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:javascript中怎么做对象的类型判断 - Python技术站