你想在不使用 typeof 的情況下知道一個(gè)函數(shù)的類型。(要了解為什么 typeof 不靠譜,請(qǐng)參見 http://javascript.crockford.com/remedial.html。)
使用下面這個(gè)type函數(shù)
type = (obj) ->
if obj == undefined or obj == null
return String obj
classToType = {
'[object Boolean]': 'boolean',
'[object Number]': 'number',
'[object String]': 'string',
'[object Function]': 'function',
'[object Array]': 'array',
'[object Date]': 'date',
'[object RegExp]': 'regexp',
'[object Object]': 'object'
}
return classToType[Object.prototype.toString.call(obj)]
這個(gè)函數(shù)模仿了 jQuery 的 $.type函數(shù)。
需要注意的是,在某些情況下,只要使用鴨子類型檢測(cè)及存在運(yùn)算符就可以不必檢測(cè)對(duì)象的類型了。例如,下面這行代碼不會(huì)發(fā)生異常,它會(huì)在 myArray 的確是數(shù)組(或者一個(gè)帶有 push 方法的類數(shù)組對(duì)象)的情況下向其中推入一個(gè)元素,否則什么也不做。
myArray?.push? myValue