【问题标题】:Cross browser way of getting variable type name in javascript在javascript中获取变量类型名称的跨浏览器方法
【发布时间】:2014-04-01 23:41:35
【问题描述】:

在所有浏览器中获取对象名称的最佳方法是什么如何在 IE 中获取对象的类型名称?

相关帖子thisthis

在这种情况下,Matrix 对象是在外部包中定义的。我只需要类型的名称 - 我对一千个 instanceof 不感兴趣......

编辑

我会更具体地说明我的问题。 This is Matrix declaration 来自 math.js。我有一个结果对象,我想检查它是否是矩阵。 Math.js 有一些自己的类型(如矩阵、单元),但它也使用常见的类型,如字符串、数字和数组。我试图将结果类型作为字符串获取,并且我试图避免专门检查每种类型。

【问题讨论】:

  • 始终有效的最简单方法是在原型级别定义一个类型字段来拼写类型。
  • result.value || result.value.constructor?
  • typeof 返回类型的字符串表示形式。对于字符串,它为对象“对象”等返回“字符串”……你能详细说明类型的“名称”是什么意思吗?
  • @Bart - 它是一个外部包,我试图避免侵入性解决方案。
  • 也许如果您描述了您实际想要完成的工作,我们可能会更好地了解哪种解决方案可以帮助您。有无数种方法可以查看对象的“类型”,因此在不知道您实际想要做什么的情况下,我们无法真正建议您选择哪种方式。

标签: javascript


【解决方案1】:

使用构造函数的名称不可靠:并非所有浏览器都支持,并且当库被缩小或混淆时,名称可能会被破坏。

有两种方法可以可靠地确定对象的类型:

  1. 使用instanceof,即

    if (result instanceof Matrix) console.log('Result is a matrix');
    
  2. 所有你感兴趣的对象原型都应该被赋予一个特殊的属性,比如_type来描述它们的类型,所以你可以检查一下

    if (result._type === 'Matrix') console.log('Result is a matrix');
    

对于 math.js,您可以只使用函数typeof 来获取任何原始类型或 math.js 特定类型。返回的类型是小写的。

console.log(math.typeof(result));   // 'matrix'
console.log(math.typeof(1.23));     // 'number'
console.log(math.typeof('hello'));  // 'string'

【讨论】:

    【解决方案2】:

    获取对象名称的最佳方法是什么

    对象没有名字。

    result.value.constructor
     > function Matrix(data) {
    

    这意味着Matrix 是一个函数,它确实有名字。

    但是,使用 function.name 来获取它是不应该依赖的非标准行为。

    正如您所发现的,它只适用于some implementations

    【讨论】:

    • IE = 头痛。 IE有什么创意对应的解决方案吗?
    • @haki AFAIK 没有好的解决方案。但您可以尝试将函数转换为字符串,并解析其名称。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-15
    相关资源
    最近更新 更多