为什么80%的码农都做不了架构师?>>>   

首先看一段ECMA中对Object.prototype.toString的解释:
Object.prototype.toString( )
When the toString method is called, the following steps are taken:
1. Get the [[Class]] property of this object.
2. Compute a string value by concatenating the three strings “[object “, Result (1), and “]”.
3. Return Result (2)
我们知道,Javascript中,一切皆为对象。所以如下代码,应当会输出对应字符:
var oP = Object.prototype,
toString = oP.toString;console.log(toString.call([123]));//[object Array]
console.log(toString.call('123'));//[object String]
console.log(toString.call({a: '123'}));//[object Object]
console.log(toString.call(/123/));//[object RegExp]
console.log(toString.call(123));//[object Number]
console.log(toString.call(undefined));//[object Undefined]
console.log(toString.call(null));//[object Null]
//....

标准浏览器中完美的作到,但是(为什么要说但是呢)IE6中,却会出现以下问题:

通过Object.prototype.toString.call获取的 字符串,undefined,null均为Object
所以,我们又要悲剧的先对以上类型进行判断,完整代码:
var oP = Object.prototype,
toString = oP.toString;function typeOf(value) {if (null === value) {return 'null';}var type = typeof value;if ('undefined' === type || 'string' === type) {return type;}var typeString = toString.call(value);switch (typeString) {case '[object Array]':return 'array';case '[object Date]':return 'date';case '[object Boolean]':return 'boolean';case '[object Number]':return 'number';case '[object Function]':return 'function';case '[object RegExp]':return 'regexp';case '[object Object]':if (undefined !== value.nodeType) {if (3 == value.nodeType) {return (/\S/).test(value.nodeValue) ? 'textnode': 'whitespace';} else {return 'element';}} else {return 'object';}default:return 'unknow';}
}

转载于:https://my.oschina.net/sfm/blog/33197

通过 Object.prototype.toString.call() 进行类型判断相关推荐

  1. 【javaScript】Object.prototype.toString.call() 、 instanceof 以及 Array.isArray() 区别与优化层面的比较

    1. Object.prototype.toString.call() 每一个继承 Object 的对象都有 toString 方法,如果 toString 方法没有重写的话,会返回 [Object ...

  2. 数据类型的判断 --Object.prototype.toString.call(obj)精准检测对象类型

    数据类型的判断 typeof typeof返回一个表示数据类型的字符串,返回结果包括:number.boolean.string.symbol.object.undefined.function等7种 ...

  3. 为什么用Object.prototype.toString.call(obj)检测对象类型?

    37 Essential JavaScript Interview Questions*,中有一道javascript题: 使用 typeof bar === "object" 检 ...

  4. JavaScript:Object.prototype.toString进行数据类型判定

    在JavaScript中,想要判断某个对象值属于哪种内置类型,最靠谱的做法就是通过Object.prototype.toString方法. var arr = []; console.log(Obje ...

  5. JavaScript中Object.prototype.toString方法的原理

    在JavaScript中,想要判断某个对象值属于哪种内置类型,最靠谱的做法就是通过Object.prototype.toString方法. <一>, ECMAScript 3  1. 在E ...

  6. Object.prototype.toString.call()检测

    在日常开发中,我们经常需要判断某个对象是否是数组类型的,在js中检测对象类型的常见的方法有几种: 1.typeof操作符.对于Function.String.Number.Undefined这几种类型 ...

  7. JavaScript:Object.prototype.toString方法的原理

    在JavaScript中,想要判断某个对象值属于哪种内置类型,最靠谱的做法就是通过Object.prototype.toString方法. var arr = []; console.log(Obje ...

  8. 由Object.prototype.toString.call( )引发关于toString( )方法的思考

    引言 前端面试中有这么一道经典的问题,如何判断一个对象是否为数组? ES5提供了一个确定对象是否为数组的函数 Array.isArray(object); 复制代码 其中,object是必须的,表示要 ...

  9. JS中的toString、Object.toString、Object.prototype.toString

    不同类型值的toString方法: //Number const num = 123; num.toString(); // '123' (123).toString(); // '123' 整数必须 ...

最新文章

  1. 智能医疗?轻松实现!
  2. 一份整理 | PyTorch是什么,为何选择它
  3. 阿里云马劲:保证云产品持续拥有稳定性的实践和思考\n
  4. Struts2-表单验证的两种方式
  5. C++语言程序设计视频教程_清华大学_郑莉(基础篇+进阶篇)
  6. Android 设置Activity透明
  7. 某业务自助开通账户问题排查
  8. 内置方法-str方法定制变量输出信息
  9. 解决IE6下 position的fixed定位问题
  10. 有赞美业微前端的落地总结
  11. dotnet 基于 dotnet format 的 GitHub Action 自动代码格式化机器人
  12. Flask --- 框架快速入门
  13. JZOJ4742 单峰
  14. toj 2798 Farey Sequence
  15. 将idea maven项目中webapp文件夹的改为Web Root
  16. Ubuntu VirtualBox 安装问题解决
  17. 12C GDS安装简记
  18. 控制器之间跳转实现转场动画,动画控制器概念
  19. 作业及管理系统(二)
  20. ms08-067漏洞 远程溢出入侵测试

热门文章

  1. 【跃迁之路】【530天】刻意练习系列289(2018.07.20)
  2. bower解决js的依赖管理
  3. Mac下获取AppStore安装包文件路径
  4. js 中读取JSON的方
  5. 局域网防雷电***实用解决方案
  6. Tencent云联网灾备方案
  7. 寒假作业,2.25,G - iBoard
  8. raid0、1、5、10创建
  9. 《中国人工智能学会通讯》——7.4 语义组合
  10. 用UltraISO制作支持windows 7的U盘启动盘