手机版

javascript中怎么做对象的类型判断

时间:2021-11-14 来源:互联网 编辑:宝哥软件园 浏览:

最近在翻看约翰瑞西格的大作《ProJavaScriptTechniques》 ,里面讲到了如何做爪哇岛描述语言的类型判断的问题。文中介绍了两种方式,一种是使用类型,另一种是使用建造者。略感遗憾的是作为jquery的作者,他尽然没有介绍jquery使用的类型判断方式。不过没有关系,我在这里给大家一起总结下。在这里我首先像大家推荐一个很好用的在线编辑器:http://js提琴。net/。他提供了jquery、mootools、原型和吉冈唯三个主流射流研究…框架的各个版本,当你需要编写简单的射流研究…测试程序的时候可以直接使用它。省去了打开编辑软件,创建各种类型文件的步骤。编辑代码之后,点击[跑]按钮,一切搞定

1 .类型类型是我们在做类型判断时最常用的方法,他的优点就是简单、好记,缺点是不能很好的判断对象、空、数组、正则表达式和自定义对象。下面是我的测试代码:复制代码代码如下:var str=' strvar arr=['1 ',' 2 '];var num=1;var bool=true var obj={ name : ' test ' };var NullObj=nullvar Undefinedobj=Undefinedvar reg=/reg/;函数fn(){ alert('这是一个函数');}函数用户(姓名){此。name=name} var用户=新用户(“用户”);console.log(字符串类型);控制台。日志(arr的类型);控制台。日志(编号的类型);控制台。日志(bool类型);控制台。日志(obj的类型);console.log(类型为NullObj);控制台。日志(Undefinedobj的类型);控制台。日志(注册的类型);控制台。日志(fn的类型);console.log(用户类型);代码运行结果

2 .构造器现在介绍一种不常使用的方法,对象构造器建造者。他的优点是支持大部分对象类型的判断,特别是对自定义对象的判断;缺点是不能在空和不明确的上使用。测试代码和之前的差不多,区别就是使用XXX。建造师代替了类型。复制代码代码如下:var str=' strvar arr=['1 ',' 2 '];var num=1;var bool=true var obj={ name : ' test ' };var NullObj=nullvar Undefinedobj=Undefinedvar reg=/reg/;函数fn(){ alert('这是一个函数');}函数用户(姓名){此。name=name} var用户=新用户(“用户”);控制台。日志(字符串。建造师);控制台。日志(arr。建造师);控制台。日志(编号。建造师);控制台。日志(bool。建造师);控制台。日志。建造师);控制台。日志。建造师);控制台。日志(fn。建造师);控制台。日志(用户。建造师);控制台。日志(NullObj。建造师);控制台。日志(Undefinedobj。建造师);运行结果

运行到控制台。日志(NullObj。建造师);的时候,浏览器报错:未捕获的类型错误:无法读取空的属性"构造函数".类似的问题也发生在控制台。日志(Undefinedobj。建造师);上面:未捕获的类型错误:无法读取未定义的属性"构造函数. 3 . object . prototype . tostring . call()最后要介绍的是jquery中使用的方式,Object.prototype.toString.call()。优点是支持绝大多数类型的判断,唯一的缺点是不支持自定义对象的判断。测试代码如下:复制代码代码如下:var str=' strvar arr=['1 ',' 2 '];var num=1;var bool=true var obj={ name : ' test ' };var NullObj=nullvar Undefinedobj=Undefinedvar reg=/reg/;函数fn(){ alert('这是一个函数');}函数用户(姓名){此。name=name} var用户=新用户(“用户”);var toString=对象。原型。toString控制台。log(ToString。call(str));控制台。log(ToString。呼叫(arr));控制台。log(ToString。call(num));控制台。log(ToString。call(bool));控制台。log(ToString。呼叫(obj));控制台。log(ToString。call(reg));控制台。log(ToString。call(fn));控制台。log(ToString。呼叫(用户));控制台。log(ToString。call(NullObj));控制台。log(tostring。call(Undefinedobj));运行结果

console . log(ToString . call(user));的返回结果为:[object Object],无法进一步判断。概括来说,javascript中常用的判断对象的方法有:typeof、构造函数和Object.prototype.toString.call()。Typeof很容易理解,它是JavaScript本身支持的语法。构造函数很少使用,但相信大家通过演示都能明白他代表什么。至于Object.prototype.toString.call(),可能有些莫名其妙。它和XXX.toString()有什么区别?为什么XXX.toString()不能直接使用?我们在浏览器中运行以下代码:查看运行结果:

Null和undefined因为没有toString()方法,它们会报告错误,所以我们就不去管它们了。至于其他对象,toString()返回的内容与Object.prototype.toString.call()返回的内容大不相同。这是因为Object.prototype.toString()方法旨在返回对象类型。String、Array、Boolean、Regexp、Number和Function都继承自Object,也继承了Object的原型方法toString(),但都重写了toString()。Xxx.toString()使用重写的方法执行,返回的结果自然与Object.prototype.toString.call()的结果不一致。通过上面的例子,大家一定要对这三种方式有更深的了解,熟悉它们的优缺点,然后根据自己的需求选择合适的方式。推荐Object.prototype.toString.call()的方法,因为它可以解决大多数情况下的判断。当返回值为[object Object]时,构造函数用来辅助判断是否为自定义对象。复制代码如下:var str=' strvar arr=['1 ',' 2 '];var num=1;var bool=truevar obj={ name : ' test ' };var nullObj=nullvar undefinedObj=undefinedvar reg=/reg/;函数fn(){ alert('这是一个函数');}函数User(name){ this . name=name;} var user=新用户(' User ');console . log(str . ToString());console . log(arr . tostring());console . log(num . tostring());console . log(bool . tostring());console . log(obj . tostring());console . log(reg . tostring());console . log(fn . tostring());console . log(user . tostring());console . log(NullObj . ToString());console . log(Undefinedobj . ToString());

版权声明:javascript中怎么做对象的类型判断是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。