用过Jquery的朋友都知道,Jquery是通过Object.prototype.toString.call还判断对象的类型的,那究竟如何做呢?
来到http://www.ecma-international.org/ecma-262/5.1/#sec-15.2.4.2的一段话:
Object.prototype.toString ( )
When the toString method is called, the following steps are taken:
1.If the this value is undefined, return "[object Undefined]".
2.If the this value is null, return "[object Null]".
3.Let O be the result of calling ToObject passing the this value as the argument.
4.Let class be the value of the [[Class]] internal property of O.
5.Return the String value that is the result of concatenating the three Strings "[object ", class, and "]".
翻译:
1.如果this的值为undefined,则返回"[object Undefined]".
2.如果this的值为null,则返回"[object Null]".
3.让O成为调用ToObject(this)的结果.
4.让class成为O的内部属性[[Class]]的值.
5.返回三个字符串"[object ", class, 以及 "]"连接后的新字符串.
因此通过调用后Object.prototype.toString.call(),都会返回 [object class]的样式,我们可以先记录起这些样式,反过来判断。
var class2type = {}, //用于记录[object class]样式 objs = "Boolean Number String Function Array Date RegExp Null Undefined".split(" "); for (var i = 0, l = objs.length; i < l; i++) { class2type[ "[object " + objs[i] + "]" ] = objs[i].toLowerCase(); } function type(obj) { return class2type[ Object.prototype.toString.call(obj) ] || "object"; }
相关推荐
console.log(Object.prototype.toString.call(arr)) //[object Array] 本文要讲的就是,toString方法是如何做到这一点的,原理是什么. ECMAScript 3 在ES3中,Object.prototype.toString方法的规范如下: 15.2.4.2 ...
为什么要用Object.prototype.toString而不是Function.prototype.toString或者其它?这是和他们的toString解释方式有关系的。下面是ECMA中对Object.prototype.toString的解释: 代码如下: Object.prototype.toString...
console.log(Object.prototype.toString.call(obj) === "[object Object]"); 使用以上方式可以很好的区分各种类型: (无法区分自定义对象类型,自定义类型可以采用instanceof区分) console.log(Object.prototype....
"一个友好的改善的 Object.prototype.toString 的实现" 本文主要讨论了一个友好的改善的 Object.prototype.toString 的实现。首先,我们需要了解 Object.prototype.toString 方法的基本概念。 Object.prototype....
主要介绍了Vue源码中要const _toStr = Object.prototype.toString的原因分析,在文中给大家提到了Object.prototype.toString方法的原理,需要的朋友可以参考下
例如,`typeof null`会返回`"object"`,而`Object.prototype.toString.call(null)`则返回`"[object Null]"`,这就能更精确地区分null和其他对象。 `toString`方法在实际编程中有很多应用场景。比如,你可以自定义...
本篇文章将深入探讨两种常见的数据类型检测方法:`typeof`和`Object.prototype.toString.call()`。 首先,我们来看`typeof`操作符。`typeof`是JavaScript内置的全局函数,用于返回一个表达式或变量的数据类型,...
生成GUID程序,C#源代码,System.Guid.NewGuid().ToString()全球唯一标识符 (GUID) 是一个字母数字标识符,用于指示产品的唯一性安装。在许多流行软件应用程序(例如 Web 浏览器和媒体播放器)中,都使用 GUID。 GUID...
为了解决这个问题,开发者通常需要结合其他方法进行更精确的类型检查,例如使用`Array.isArray()`来判断数组,或使用`Object.prototype.toString.call()`。 3. `Object.prototype.toString.call()`: 这种方法通过...
例如,`Object.prototype.toString.call(value)`可以返回`[object Type]`的形式,其中`Type`是值的类型。这使得我们能够编写出比`typeof`更精确的类型检测函数: ```javascript var type = function (o) { var s =...
console.log(Object.prototype.toString.call(arr)) // [object Array] ``` 在上面的例子中,我们使用 Object.prototype.toString.call(arr) 来检测数组的类型。该方法返回 `[object Array]`,表明该对象是一个数组...
它通过比较`Object.prototype.toString.call(obj)`的结果与`'[object Object]'`来判断。 7. `isArray` 函数确定一个值是否为数组。在旧版本的JavaScript中,它可能需要被挂载到Array对象上,以支持老版本浏览器。`...
在JavaScript编程语言中,`Object.prototype` 是一个特殊的存在,它是所有对象的原型链的起点。这个原型对象包含了诸如 `toString`、`hasOwnProperty` 等基础方法,因此对它的修改应当谨慎处理,因为这可能会影响到...