JavaScript中使用Object.prototype.toString判断是否为数组
为什么要用Object.prototype.toString而不是Function.prototype.toString或者其它?这是和他们的toString解释方式有关系的。下面是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)
其过程简单说来就是:1、获取对象的类名(对象类型)。2、然后将[object、获取的类名、]组合并返回。
ECMA中对Array有如下说明:
The [[Class]] property of the newly constructed object is set to “Array”.
因此我们用如下代码来检测数组:
function isArray(o) { return Object.prototype.toString.call(o) === '[object Array]'; }
这种方式既解决了instanceof存在的跨页面问题,也解决了属性检测方式所存在的问题,实在是一种妙招,一个很好的解决方案。
除此之外,这种解决办法也可以应用于判断Date,Function等类型的对象。
另外还有几个方法:
var arr = []; return arr instanceof Array;
如果有其他好的方法不妨贴出来。
相关推荐
-
JavaScript中Object.prototype.toString方法的原理
在JavaScript中,想要判断某个对象值属于哪种内置类型,最靠谱的做法就是通过Object.prototype.toString方法. var arr = []; console.log(Object.prototype.toString.call(arr)) //"[object Array]" 本文要讲的就是,toString方法是如何做到这一点的,原理是什么. ECMAScript 3 在ES3中,Object.prototype.toString方法的规范如下: 15.2.
-
JS 对象(Object)和字符串(String)互转方法
利用原生JSON对象,将对象转为字符串 var jsObj = {}; jsObj.testArray = [1,2,3,4,5]; jsObj.name = 'CSS3'; jsObj.date = '8 May, 2011'; var str = JSON.stringify(jsObj); alert(str); 从JSON字符串转为对象 var jsObj = {}; jsObj.testArray = [1,2,3,4,5]; jsObj.name = 'CSS3'; jsObj.da
-
JavaScript中的object转换成number或string规则介绍
在JavaScript程序编写过程中,根据不同的上下文,JS会自动将object转换成number或者string后再处理.这种自动转换的规则如下: object自动转换成string的规则: 1.如果object所属类覆写了toString()方法,则调用该方法.如果toString()调用的返回结果为Primitive(string.number.boolean.undefined.null),则将该Primitive值转换成string后返回. 2.如果object所属类没有覆写toStr
-
js Object2String方便查看js对象内容
<script type="text/javascript"> /** * 将JS的任意对象输出为json格式字符串 * @param {Object} _obj: 需要输出为string的对象 */ var obj2String = function(_obj) { var t = typeof (_obj); if (t != 'object' || _obj === null) { // simple data type if (t == 'string') { _o
-
JavaScript中的object转换函数toString()与valueOf()介绍
JavaScript中,object转换为boolean的操作非常简单:所有的object转换成boolean后均为true:即使是new Boolean(false)这样的object在转换为boolean后仍然为true. 复制代码 代码如下: var x = new Boolean(false); if(x){ console.log("x is true"); } 在将object转换为string或者number时,JavaScript会调用object的两个转换函数:t
-
javascript中将Object转换为String函数代码 (json str)
复制代码 代码如下: function obj2str(o){ var r = []; if(typeof o =="string") return "\""+o.replace(/([\'\"\\])/g,"\\$1").replace(/(\n)/g,"\\n").replace(/(\r)/g,"\\r").replace(/(\t)/g,"\\t")+&quo
-
Js判断参数(String,Array,Object)是否为undefined或者值为空
有时候我们会遇到这样的情况:在一些前端控件要提交数据到服务器端的数据验证过程中,需要判断提交的数据是否为空.如果是普通表单的字符串数据,只需要在 trim 后判断 length 即可,而这里需要的数据可以是各种不同的类型(数字.字符串.数组.对象等等),通过 JSON.stringify(data) 进行序列化后再传递. 在这里定义如下的数据值为"空值": •undefined•null•空字符串及纯空白字符串:''.' ' 等.•空数组:[]•空对象:{} 对于除此以外的数据值
-
JavaScript中使用Object.prototype.toString判断是否为数组
为什么要用Object.prototype.toString而不是Function.prototype.toString或者其它?这是和他们的toString解释方式有关系的.下面是ECMA中对Object.prototype.toString的解释: 复制代码 代码如下: Object.prototype.toString( ) When the toString method is called, the following steps are taken: 1. Get the [[Cla
-
javascript学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
在使用面向对象编程时,对象间的继承关系自然少不了!而原型正是实现javascript继承的很重要的一种方法! 我们首先来看以下代码: 复制代码 代码如下: function person(name, age) { this.name = name; this.age = age; } person.prototype.getInfo = function() { alert("My name is "+this.name+", and I have "+this.a
-
Vue源码中要const _toStr = Object.prototype.toString的原因分析
在vue的源码中,vue/src/shared/util.js文件中存放的是一些方法.其中作者用了Object.prototype.toString这个方法来判断类型,但是并没有直接用,而是单独保存在一个变量: const _toStr = Object.prototype.toString 那么为什么要这么做呢? 先说下判断类型.众所周知,typeof在判断对象时不能正确判断Null,并且不能识别出Array,但在判断基础类型时是没问题的.所以尤大也写了: export function is
-
javascript中对变量类型的判断方法
在JavaScript中,有5种基本数据类型和1种复杂数据类型,基本数据类型有:Undefined, Null, Boolean, Number和String:复杂数据类型是Object,Object中还细分了很多具体的类型,比如:Array, Function, Date等等.今天我们就来探讨一下,使用什么方法判断一个出一个变量的类型. 在讲解各种方法之前,我们首先定义出几个测试变量,看看后面的方法究竟能把变量的类型解析成什么样子,以下几个变量差不多包含了我们在实际编码中常用的类型. var
-
JavaScript中的Object对象学习教程
参数: (1)obj 必需.Object 对象分配到的变量名称. (2)值 可选.任一 JavaScript 基元数据类型(数字.布尔值或字符串). 如果值是一个对象,则返回的对象是未修改的. 如果值是 null."未定义"或"未提供",则创建无内容的对象. Object对象的方法 Object作为构造函数使用时,可以接受一个参数.如果该参数是一个对象,则直接返回这个对象:如果是一个原始类型的值,则返回该值对应的包装对象.利用这一点,可以写一个判断变量是否为对
-
基于javascript中的typeof和类型判断(详解)
typeof ECMAScript 有 5 种原始类型(primitive type),即 Undefined.Null.Boolean.Number 和 String.我们都知道可以使用typeof运算符求得一个变量的类型,但是对引用类型变量却只会返回object,也就是说typeof只能正确识别基本类型值变量. var a = "abc"; console.log(typeof a); // "string" var b = 123; console.log(t
-
javascript 中__proto__和prototype详解
__proto__是内部原型,prototype是构造器原型(构造器其实就是函数) 构造器的原型(prototype)是一个对象 那什么是构造器呢? 要想创建一个对象,首先要有一个对象构造器,就像php里面一样,要想创建一个对象,首先要有一个类 构造器的实质就是一个函数,下面的问题是:如何通过这个构造器来创建一个对象呢? 答案: new 构造器构造的是对象. 一.所有构造器/函数的__proto__都指向Function.prototype,它是一个空函数(Empty function) 复制代
-
深入理解Javascript中的valueOf与toString
基本上,javascript中所有数据类型都拥有valueOf和toString这两个方法,null除外.它们俩解决javascript值运算与显示的问题,本文将详细介绍,有需要的朋友可以参考下. toString() toString()函数的作用是返回object的字符串表示,JavaScript中object默认的toString()方法返回字符串"[object Object]".定义类时可以实现新的toString()方法,从而返回更加具有可读性的结果.JavaScript对
随机推荐
- SQL提取数据库表名及字段名等信息代码示例
- ASP.NET文件上传控件Uploadify的使用方法
- mysql仿oracle的decode效果查询
- Windows 下安装配置 Eclipse详细教程
- java高级排序之希尔排序
- python中私有函数调用方法解密
- 平衡二叉树的实现实例
- JavaScript实现拖拽元素对齐到网格(每次移动固定距离)
- jQuery Chart图表制作组件Highcharts用法详解
- Anti-Virus Tools 2007 熊猫专杀民间版下载
- JS排序之选择排序详解
- js实现模拟银行卡账号输入显示效果
- 实战宽带ADSL防火墙配置
- 利用flash的swf文件猛烈提高google PR值
- 使用Java代码进行因数分解和求最小公倍数的示例
- C/C++中可变参数的用法详细解析
- python操作xml文件详细介绍
- Android条目拖拽删除功能实例代码
- js获取html页面代码中图片地址的实现代码
- 在VS Code上搭建Python开发环境的方法