【问题标题】:Object.prototype.toString() - trying to get 'String' instead of [object String]Object.prototype.toString() - 试图获取 'String' 而不是 [object String]
【发布时间】:2016-05-22 23:06:18
【问题描述】:

我试图通过不使用 typeof 来获取参数的类型。另外(练习的一部分)我必须使用 Object.prototype.toString...

调用函数应该返回(例如,如果它是一个字符串)“String”。但是,我的代码返回 String]

如何移除支架? 谢谢!

function types(x){

   var array = Object.prototype.toString.call(x);
    var arr= array.split(" ");
   return arr[1];
}

类型(“你好”);

【问题讨论】:

标签: javascript prototype typeof


【解决方案1】:

我不知道为什么你必须使用 Object.prototype.toString 因为原生字符串不是对象。如果你在一个字符串上强制它,那么它将返回“[object String]”。

如果你想要一个变量的类型,那么你可以简单地使用下面的函数

var types = x => x.contructor.name;

如果你必须,那么你使用以下

var types = x => Object.prototype.toString.call(x).match(/\[object (.*)\]/)[1];

这是低效的,因为您首先用对象变量包装原始变量,然后调用其 toString 函数,然后调用 regExp(或 substr)。

【讨论】:

  • OP 说这是练习的一部分,他们必须使用toString
  • 警告: 如果 x 为 nullundefinedx.constructor.name 将出错。不要在不确定变量类型的任何情况下使用它。
【解决方案2】:

这将返回String。使用slice() 删除尾随的]

function types(x) {
   var array = Object.prototype.toString.call(x);
   var arr = array.split(" ");
   return arr[1].slice(0, -1);
}
console.log(types('hello')) // String

【讨论】:

    猜你喜欢
    • 2021-12-31
    • 1970-01-01
    • 2010-10-26
    • 2023-03-17
    • 1970-01-01
    • 2018-10-29
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    相关资源
    最近更新 更多