网站制作技术之javascript篇当前位置:首页>主要服务>网站制作>JS/Jquery网站制作技术之javascript篇 -----JavaScript 类型检测方法
在JavaScript中要检测一个变量是不是基本类型?typeof操作符是最佳的工具。更具体的说,typeof是确定一个变量是字符串、数值、布尔值、还是undefined的最佳工具。如果变量的值是一个对象或null,则typeof操作会像下面例子中所示的那样返回“object”。
var s = "w3ctech"; var b = true; var i = 22; var u; var n = null; var o = new Object(); alert(typeof s); //string alert(typeof i); //number alert(typeof b); //boolean alert(typeof u); //undefined alert(typeof n); //object alert(typeof o);
虽然在检测基本数据类型时typeof是非常得力的助手,但是在检测引用类型的值时, 这个操作符的用处不大。通常,我们并不是想知道某个值是对象,而是想知道它是什么类型的对象。为此,ECMAScript提供了instanceof操作符,其语法如下:
result = variable instanceof constructor
如果变量是给定引用类型(由构造函数表示)的实例,那么instanceof操作符就会返回true。请看下面的例子:
alert(person instanceof Object); //变量person 是 Object吗? alert(colors instanceof Array); //变量colors 是 Array吗? alert(pattern instanceof RegExp); //变量pattern 是 RegExp吗?
根据规定,所有引用类型的值都是Object的实例。因此,在检测一个引用类型值和Object构造函数时,instanceof操作符始终会返回true。当然如果使用instanceof操作符检测基本类型的值,则始终会返回false。因此基本类型不是对象。 var arr = []; arr.__proto__ = {}; arr instanceof Array;//false
所以才有借助ECMAScript object内部属性[[Class]]的需求.即{}.toString.call(arr)的出现.那么还有没有其他办法呢? 答案是yes. 参考下面的代码:
var arr =[]; arr.constructor && arr.constructor == Array.toString();// true.
原理是通过比较对象构造器的字符串表示.当然,严格来说.这些信息都是可以后期伪造或更改的. 所以还是{}.toString.call是最靠谱的做法.但,你应该了解,从性能角度来说. typeof的性能是最佳的. 而 constructor 和{}.toString.call 在IE系则是constructor的性能要比后者高那么一丁点.而在非IE.后者的效率要比constructor方式性能高10倍左右. 所以最佳实践不用说了,只要不是 object.建议使用typeof.否则用{}.toString.call.
1
|
易势网站制作,以DIV+CSS为主,js/jQuery为辅,制作利于优化,页面美观的优质网站!
网络策划公司|新浪官方微博|大连网站建设
沈阳易势科技有限公司 网站制作网络营销公司 © 2011 , All rights reserved. 公司地址:沈阳市铁西区贵和街道建设中路15号浅草绿阁商务楼402室沈阳网站制作易势最专业
辽B2-20150173-8号