位置: 编程技术 - 正文

判断js中各种数据的类型方法之typeof与0bject.prototype.toString讲解(在js中如何判断数据类型)

编辑:rootadmin

1、typeof(param) 返回param的类型(string)

这种方法是JS中的定义的全局方法,也是编译者们最常用的方法,优点就是使用简单、好记,缺点是不能很好的判断object、null、array、regexp和自定义对象。

示例代码:结果为:2、Object.prototype.toString().call(param) 返回param的类型(string,格式是[object class])

这个方法能支持绝大多数类型的判断,jquery封装的类型判断就用的这个方法。可能有些人看起来有点迷茫,我来给大家分解一下。

1)call(param)函数

a.fun().call(b)的意思在js中是指,让对象b来代替a,然后执行a的fun函数,写个例子:运行结果,输出的为class2,而不是class1,这就相当于是方法继承。所以,Object.prototype.toString().call(param)的意思其实就是,param.prototype.toString(),那么我们为什么不直接写param.prototype.toString(),而是用call()绕一下呢,下面请看2来了解。

2)Object.prototype.toString()

Object是个什么东东呢?,Script.chm(就是M$官方教程)上说:Obect提供所有 JScript对象通用的功能,其实Object就是所有js对象的祖先,是一个概念,js中的所有对象就是Object的实例,然后不同的对象重写自己独立的方法。而prototype,大家就没必要追究太深了,它就是返回一个原型的引用,然可以可以动态的给原型添加方法和属性一个小例子那么就会分别输出 class和prototype test class,本来构造函数class() 里是没有定义showNameContact函数的,而通过prototype我们就可以给对象原型动态添加函数,new的示例中自然就会有了。所以Object.prototype.toString()的意思就是执行Object这个祖先中的toString方法。

那么toString()是干嘛的呢?很多js手册中对toString()函数是这样定义的:toString() 方法可把一个逻辑值转换为字符串,并返回结果,语法为:booleanObject.toString()。刚才我说了,js中的对象都是继承的Object,这些对象都自定义的有函数或者重构了Object的部分函数,而且它们都对toString()函数进行了重写。所以我们不能想1中直接写param.prototype.toString()这样就执行的是param自己重写后的toString()函数了。

好了,到关键的时刻了,toString()到底是干嘛的呢,有什么作用呢?

在ES3中,Object.prototype.toString方法的规范如下:

Object.prototype.toString()

在toString方法被调用时,会执行下面的操作步骤:

1. 获取this对象的[[Class]]属性的值.

2. 计算出三个字符串"[object ", 第一步的操作结果Result(1), 以及 "]"连接后的新字符串.

3. 返回第二步的操作结果Result(2).

在ES3中,规范文档并没有总结出[[class]]内部属性一共有几种,不过我们可以自己统计一下,原生对象的[[class]]内部属性的值一共有种.分别是:"Array", "Boolean", "Date", "Error", "Function", "Math", "Number", "Object","RegExp", "String".所以Object.prototype.toString()的输出结果就是这种格式的字符串[object Array],[object Boolean]。

在ES5.1中,除了规范写的更详细一些以外,Object.prototype.toString方法和[[class]]内部属性的定义上也有一些变化,Object.prototype.toString方法的规范如下:

Object.prototype.toString ( )在toString方法被调用时,会执行下面的操作步骤:

1 如果this的值为undefined,则返回"[object Undefined]".2 如果this的值为null,则返回"[object Null]".3 让O成为调用ToObject(this)的结果.4 让class成为O的内部属性[[Class]]的值.5 返回三个字符串"[object ", class, 以及 "]"连接后的新字符串.

可以看出,比ES3多了1,2,3步.第1,2步属于新规则,比较特殊,因为"Undefined"和"Null"并不属于[[class]]属性的值。经统计,可返回的类型有"Arguments", "Array", "Boolean", "Date", "Error", "Function", "JSON", "Math", "Number", "Object", "RegExp", "String"比ES3多了2种分别是arguments对象的[[class]]成了"Arguments",而不是以前的"Object",还有就是多个了全局对象JSON,它的[[class]]值为"JSON"。

最后的最后提醒大家,Object.prototype.toString().call(param)返回的[object class]中class首字母是大写,像JSON这种甚至都是大写,所以,大家判断的时候可以都转换成小写,以防出错,Object.prototype.toString().call(param).toLowerCase()即可。

推荐整理分享判断js中各种数据的类型方法之typeof与0bject.prototype.toString讲解(在js中如何判断数据类型),希望有所帮助,仅作参考,欢迎阅读内容。

判断js中各种数据的类型方法之typeof与0bject.prototype.toString讲解(在js中如何判断数据类型)

文章相关热门搜索词:js判断数值,判断js中各种数字的方法,在js中如何判断一个数据类型,js ?判断,判断js中各种数的值,js判断数值,在js中如何判断一个数据类型,判断js中各种数的值,内容如对您有帮助,希望把文章链接给更多的朋友!

js字符串转成JSON 例1在JS中,把json格式的字符串转成JSON对象,关键代码json=eval('('+str+')');方法如下:!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""

JavaScript中this的使用详解 我们要记住一句话:this永远指向函数运行时所在的对象!而不是函数被创建时所在的对象。切记…本文将分三种情况来分析this对象到底身处何方。普

setTimeout和setInterval的深入理解 大概半年前发表过一篇关于setTimeout和setInterval的文章,但是现在回去仔细一看发现其实存在很多不足以及错误。事实上,setTimeout和setInterval并没有我们

标签: 在js中如何判断数据类型

本文链接地址:https://www.jiuchutong.com/biancheng/376094.html 转载请保留说明!

上一篇:Javascript事件实例详解

下一篇:js字符串转成JSON(js字符串转为json)

  • 计提税金会计分录怎么算
  • 小规模纳税人所得税优惠政策2023
  • 为职工垫付的水电费应计入
  • 机动车检测公司上班时间
  • 个体户核定双定户是否可以年度汇算清缴
  • 项目转包是什么意思
  • 零申报企业所得税季度申报表怎么填写
  • 收到股东投资款怎么做账
  • 卖掉的固定资产计入什么科目
  • 盈余公积转增股本的分录怎么写
  • 企业所得税汇算清缴申报表
  • 个人独资企业的债务由谁承担
  • 出售资产时递延所得税怎么处理
  • 产品在海关发生质量问题
  • 本月完工产品的会计分录
  • 税号开错了
  • 税率开错跨月没法收回
  • 买牛奶的公司会计怎么做账
  • 银行手续费可以抵扣企业所得税吗
  • 股权激励技术入股的最新政策
  • 电商平台名称怎么注册
  • 绩效奖金是否属于工资判决书
  • 固定资产发现入账错误折旧如何处理?
  • 鸿蒙负一屏怎么设置
  • 刚装好的服务器怎么安装
  • 各部门领料情况,a产品耗用甲材料3200元
  • 联想随身充评测
  • 代办退税账务处理
  • PHP:preg_replace_callback()的用法_PCRE正则函数
  • scworker.exe是病毒
  • 压缩模制
  • latex双栏图片
  • PHP:finfo_file()的用法_fileinfo函数
  • 出口商品怎么做分录
  • 大雾山国家公园总部加特林堡
  • 柏林亚历山大广场1980
  • framework 4 client profile 不动
  • 差额征税收到雇主责任险进项发票能抵扣吗
  • thinkphp框架怎么用
  • 代扣代缴的附加税怎么入账
  • 主营业务收入月末需要结转吗
  • 云原生istio
  • nlp track
  • 在汇算清缴前未支付的年终奖不可以在所得税前扣除
  • 生育保险断缴后果
  • 车船税是什么样子的?
  • 预缴土地增值税税率表2023年最新
  • 企业股权融资方式有哪些
  • 主营业务收入如何做分录
  • 代理进口产品
  • 发票跨年红冲 交税
  • 私车公用是否违法
  • 注册资金一般是多少
  • 成品油预付卡销售*成品油卡 怎么入账
  • 包工包料怎么开13个点发票
  • 代理返利什么意思
  • 什么样的发票公司可以开
  • 销售收入包含哪些费用
  • sql无法用sql身份验证
  • mysql增删改查实例
  • 如何使用命令查找电脑IP地址
  • win8怎么打开系统设置
  • arm和x86性能差多少
  • 电脑系统停用
  • Retina MacBook和10.10.3支持更快的NVMe SSD接口
  • pkg-config命令
  • macbook qq截图存在哪
  • fs是什么文件
  • win8系统映像
  • win10如何彻底关掉自动锁屏
  • win7电脑曝光度过高怎么调
  • Node.js中的什么模块是用于处理文件和目录的
  • unity射击游戏完整案例
  • javascript基础编程
  • Python 常用库
  • Android boot.img制作
  • 广州契税补贴2022政策
  • 小微企业企业所得税是多少?
  • 国外寄东西到国内要身份证号码吗
  • 小微企业企业所得税率
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设