CoffeeScript攻略2.3:CoffeeScrip的type函式

CoffeeScript Cookbook發表於2011-11-17

問題

你想在不使用typeof的情況下知道一個函式的型別。(要了解為什麼typeof不靠譜,請參見http://javascript.crockford.com/remedial.html。)

方案

使用下面這個type函式

type = (obj) ->
  if obj == undefined or obj == null
    return String obj
  classToType = new Object
  for name in "Boolean Number String Function Array Date RegExp".split(" ")
    classToType["[object " + name + "]"] = name.toLowerCase()
  myClass = Object.prototype.toString.call obj
  if myClass of classToType
    return classToType[myClass]
  return "object"

討論

這個函式模仿了jQuery的$.type函式http://api.jquery.com/jQuery.type/

需要注意的是,在某些情況下,只要使用鴨子型別檢測及存在運算子就可以不必檢測物件的型別了。例如,下面這行程式碼不會發生異常,它會在myArray的確是陣列(或者一個帶有push方法的類陣列物件)的情況下向其中推入一個元素,否則什麼也不做。

myArray?.push? myValue

enter image description here

相關文章