您现在的位置:主页 > 网站制作 > 脚本技术 >

javascript typeof 操作符

来源:新2备用网址hg622.com|首页吧 责任编辑:Jzq8 发表时间:2011-12-09 点击:次

typeof 操作符
typeof 操作符(和 instanceof 一起)或许是 JavaScript 中最大的设计缺陷,
因为几乎不可能从它们那里得到想要的结果。
尽管 instanceof 还有一些极少数的应用场景,typeof 只有一个实际的应用(译者注:这个实际应用是用来检测一个对象是否已经定义或者是否已经赋值),
而这个应用却不是用来检查对象的类型。
??? 注意: 由于 typeof 也可以像函数的语法被调用,比如 typeof(obj),但这并是一个函数调用。
??? 那两个小括号只是用来计算一个表达式的值,这个返回值会作为 typeof 操作符的一个操作数。
??? 实际上不存在名为 typeof 的函数。
JavaScript 类型表格
Value?????????????? Class????? Type
-------------------------------------
"foo"?????????????? String???? string
new String("foo")?? String???? object
1.2???????????????? Number???? number
new Number(1.2)???? Number???? object
true??????????????? Boolean??? boolean
new Boolean(true)?? Boolean??? object
new Date()????????? Date?????? object
new Error()???????? Error????? object
[1,2,3]???????????? Array????? object
new Array(1, 2, 3)? Array????? object
new Function("")??? Function?? function
/abc/g????????????? RegExp???? object (function in Nitro/V8)
new RegExp("meow")? RegExp???? object (function in Nitro/V8)
{}????????????????? Object???? object
new Object()??????? Object???? object
上面表格中,Type 一列表示 typeof 操作符的运算结果。可以看到,这个值在大多数情况下都返回 "object"。
Class 一列表示对象的内部属性 [[Class]] 的值。
??? JavaScript 标准文档中定义: [[Class]] 的值只可能是下面字符串中的一个:
??? Arguments, Array, Boolean, Date, Error,
??? Function, JSON, Math, Number, Object, RegExp, String.
为了获取对象的 [[Class]],我们需要使用定义在 Object.prototype 上的方法 toString。
对象的类定义
JavaScript 标准文档只给出了一种获取 [[Class]] 值的方法,那就是使用Object.prototype.toString。
function is(type, obj) {
??? var clas = Object.prototype.toString.call(obj).slice(8, -1);
??? return obj !== undefined && obj !== null && clas === type;
}
is('String', 'test'); // true
is('String', new String('test')); // true
上面例子中,Object.prototype.toString 方法被调用,this 被设置为了需要获取 [[Class]]值的对象。
Object.prototype.toString 返回一种标准格式字符串,所以上例可以通过 slice截取指定位置的字符串,如下所示:
Object.prototype.toString.call([])? // "[object Array]"
Object.prototype.toString.call({})? // "[object Object]"
Object.prototype.toString.call(2)?? // "[object Number]"
??? ES5 提示: 在 ECMAScript 5 中,为了方便,对 null 和 undefined 调用Object.prototype.toString 方法,

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
匿名?

今日头条

更多>>

推荐图文

  • 分享JS高手制作的10个好玩的JS游戏
  • Webjx收集10个优秀的jQuery幻灯片教程
  • 帮助你创建复杂的网页布局的6款JavaScript插件
  • jQuery实现网页精美幻灯片特效的21个实例
  • 经典格斗游戏《街头霸王》的JavaScript实现
  • jQuery实现简单而且很酷的返回顶部链接效果
Alexa - 客户服务 - 联系方法 - 招聘信息 - 友情链接 - 网站地图 - TAG标签 - RSS订阅
Copyright ? 2013 JZQ8.COM. 新2备用网址hg622.com|首页吧|新2备用网址hg622.com|首页去吧 版权所有
冀ICP备09002514号
冀ICP备09002514号 网络报警 企业法人营业执照 中国互联网协会 支付宝付款 网银在线付款