【问题标题】:Javascript function parameter to StringJavascript函数参数到字符串
【发布时间】:2011-10-14 08:51:42
【问题描述】:

我有一个带有参数的 javascript 函数,例如:

function getSomething(cat,handler) {

      varURI = 'text'+cat;
      document.write('<p>'+varURI+'</p>');

    }

我在输出中看到的是:

text[object Object]

如何获取 Object 的真实文本值?

【问题讨论】:

    标签: javascript string object


    【解决方案1】:

    我不知道cat是什么,但通常你使用toString()方法。

    function getSomething(cat,handler) {
    
      varURI = 'text'+cat.toString();
      document.write('<p>'+varURI+'</p>');
    
    }
    

    【讨论】:

    • 实际上,他得到"[object Object]"是因为该对象没有自己的toString方法(它正在执行从Object.prototype.toString继承的方法),调用cat.toString();而不覆盖它不会有所作为,例如:console.log({}+'');console.log({}.toString()); 都产生 "[object Object]"
    【解决方案2】:

    你需要重写对象的toString 方法——并给你的对象一个“文本值”——。

    你得到"[object Object]"是因为继承的Object.prototype.toString方法正在被执行,例如:

    var cat = {
      name: 'Kitten',
      toString: function () {
        return this.name + ' meow';
      }
    };
    

    这个自己的toString 方法将在你进行任何隐式到字符串的转换时执行(比如当你将一个字符串连接到它时),例如:

    console.log(cat+' text'); // "Kitten meow text"
    

    注意:如果您所说的“文本值”是对象的“字符串表示”(例如列出属性/值对),您的函数将需要枚举所有属性(使用 for-in 语句),但是通常大多数时候,这是为了调试目的,如果是这种情况,我建议你获取一个调试器(如 Firebug),并使用console.dir 方法。

    【讨论】:

      【解决方案3】:

      你可以这样做:

      function ObjectToString(input,KeysOnly) {
          var ret = [];
          if(KeysOnly) 
             for(var k in input) 
              ret[k] = input[k]; 
          else 
              for(var k in input) 
              ret.push(k);
          return ret.toString();
      }
      
      function getSomething(cat,handler) {
      
        varURI = 'text'+ObjectToString(cat);
        document.write('<p>'+varURI+'</p>');
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-04
        • 2014-07-09
        • 1970-01-01
        • 2021-10-28
        • 2017-05-29
        • 2019-02-04
        • 2019-11-17
        • 2015-04-22
        相关资源
        最近更新 更多