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

javascript typeof 操作符

来源:建站吧 责任编辑: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. 建站吧|建站去吧 版权所有
冀ICP备09002514号
冀ICP备09002514号 网络报警 企业法人营业执照 中国互联网协会 支付宝付款 网银在线付款