You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
vardate=newDate();varerror=newError();varfn=function(){};console.log(typeofdate);// objectconsole.log(typeoferror);// objectconsole.log(typeoffn);// function
Object.prototype.toString
所有,该如何区分 object 呢?我们用Object.prototype.toString。
规范:当 toString 方法被调用的时候,下面的步骤会被执行:
如果 this 值是 undefined,就返回 [object Undefined]
如果 this 的值是 null,就返回 [object Null]
让 O 成为 ToObject(this) 的结果
让 class 成为 O 的内部属性 [[Class]] 的值
最后返回由 "[object " 和 class 和 "]" 三个部分组成的字符串
通过规范,我们至少知道了调用 Object.prototype.toString 会返回一个由 "[object " 和 class 和 "]" 组成的字符串,而 class 是要判断的对象的内部属性。
varclass2type={};"Boolean Number String Function Array Date RegExp Object Error Null Undefined Symbol Set Map BigInt".split(" ").map(function(item){class2type["[object "+item+"]"]=item.toLowerCase();});functiontype(obj){if(obj==null){returnobj+"";// IE6}returntypeofobj==="object"||typeofobj==="function"
? class2type[Object.prototype.toString.call(obj)]
: typeofobj;}
typeof
最新的 ECMAScript 标准定义了 8 种数据类型:
7 种原始类型:
和 Object
使用 typeof 检测类型如下:
所以 typeof 能检测出七种基本类型的值,但是,除此之外 Object 下还有很多细分的类型呐,如 Array、Function、Date、RegExp、Error 等。
如果用 typeof 去检测这些类型,返回的都是 object,除了 Function:
Object.prototype.toString
所有,该如何区分 object 呢?我们用
Object.prototype.toString
。规范:当 toString 方法被调用的时候,下面的步骤会被执行:
[object Undefined]
[object Null]
ToObject(this)
的结果[[Class]]
的值"[object "
和class
和"]"
三个部分组成的字符串通过规范,我们至少知道了调用
Object.prototype.toString
会返回一个由"[object " 和 class 和 "]"
组成的字符串,而 class 是要判断的对象的内部属性。我们可以了解到这个 class 值就是识别对象类型的关键!
正是因为这种特性,我们可以用
Object.prototype.toString
方法识别出更多类型!先看下常见的 15 种(ES6 新增:Symbol Set Map,还有 BigInt):
除了以上 15 种,还有以下 3 种:
type API
写一个 type 函数能检测各种类型的值,如果是基本类型,就使用 typeof,引用类型就使用 toString。
此外鉴于 typeof 的结果是小写,我也希望所有的结果都是小写。
这里
class2type[Object.prototype.toString.call(obj)] || "object"
的 object,为了 ES6 新增的 Symbol、Map、Set 等类型返回 object。当然也可以添加进去,返回的就是对应的类型:
isFunction
isArray
plainObject
plainObject
来自于 jQuery,可以翻译成纯粹的对象,所谓"纯粹的对象",就是该对象是通过 "{}" 或 "new Object" 创建的,该对象含有零个或者多个键值对。之所以要判断是不是
plainObject
,是为了跟其他的 JavaScript 对象如 null,数组,宿主对象(documents)等作区分,因为这些用 typeof 都会返回 object。EmptyObject
jQuery 提供了
isEmptyObject
方法来判断是否是空对象,代码简单:Window 对象
Window 对象作为客户端 JavaScript 的全局对象,它有一个 window 属性指向自身。我们可以利用这个特性判断是否是 Window 对象。
isArrayLike
如果 isArrayLike 返回 true,至少要满足三个条件之一:
obj[length - 1]
必须存在isElement
判断是不是 DOM 元素
原文地址
The text was updated successfully, but these errors were encountered: