我尝试使用instanceof,但是无法区分{}
,[]
和Date
。
例如,如果我要制作一个像这样的if树:
function foo(someVar){
if (/*someVar is an {}*/) {
} else if (/*someVar is an []*/) {
} else { //someVar could be a String or a Date or anything
}
}
如果有条件,我该如何先写?任何帮助将不胜感激,谢谢!
我尝试使用instanceof,但是无法区分{}
,[]
和Date
。
例如,如果我要制作一个像这样的if树:
function foo(someVar){
if (/*someVar is an {}*/) {
} else if (/*someVar is an []*/) {
} else { //someVar could be a String or a Date or anything
}
}
如果有条件,我该如何先写?任何帮助将不胜感激,谢谢!
检查某物是否为“普通对象”的第一件事就是要查看其是否没有原型。
所以我想我可以这样写:
function foo(someVar){
if (typeof "someVar" === 'object' && someVar.prototype === undefined) {
} else if (Array.isArray(someVar)) {
} else {
}
}
,
此问题已在单独的线程中回答
日期 How to check whether an object is a date?
数组 How to detect if a variable is an array
对象 Check if a value is an object in JavaScript
,检查该值是否为数组类型,可以使用Array.isArray() 例如:
var first=Array.isArray([1,'fruits',3])
var second=Array.isArray('foo')
console.log(first)
console.log(second)
要检查值是否为对象类型,事情会有些困难,因为类型对象是诸如Function,array等太多类型的保护伞,但是您可以使用此函数,但这绝不会起作用适用于所有类型,因为它不会排除所有类型,但会排除大多数类型
ob=[]
function isObject(obj) {
if(obj === Object(obj)){
return Array.isArray(obj)?false:(typeof obj === 'function'?false
:(Object.prototype.toString.call(obj) === '[object Date]'?false
:(Object.prototype.toString.call(obj) === '[object Number]'?false
:(Object.prototype.toString.call(obj) === '[object Math]'?false:true))))}
else
return false
}
console.log(isObject(ob))
要检查类型日期,可以使用此
Object.prototype.toString.call(obj) === '[object Date]