企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## 问题 不借助`typeof`获取一个对象的类型(关于为什么`typeof`不给力的原因请参考http://javascript.crockford.com/remedial.html,)。 ## 方法 使用下面这个函数: ~~~ 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 ~~~