2013-10-09 82 views
1

我有一個包含對象文本字符串:如何將對象轉換爲其文字字符串?

var literalStr = "{ 
    a: 1, 
    b: function(){return 'b'} 
}"; 

我可以從字符串創建一個對象:

var obj = eval("(" + literalStr + ")"); 

有一個簡單的辦法讓文字串從對象回來?

我在尋找類似JSON.stringify()但因此它創建原始文字具有的功能和屬性名稱不帶引號。

+0

這就是['toSource'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/ Global_Objects/Object/toSource) - 但它是Firefox特有的。 – georg

+1

@akmidd你已經在literalStr中擁有它了。你爲什麼不能使用它? – user10

+0

因爲我想從任何對象中獲取文字,而不僅僅是從已知文字創建的文字。 –

回答

1

您正在尋找非標準toSource method(s)。請注意,跨瀏覽器版本是不可能的,因爲某些js引擎不提供從函數獲取源字符串的可能性。

+0

「不可能」..強詞! –

+0

@Buchow_PHP:但我的意思是。檢查[perfectionkills.com/those-tricky-functions](http://web.archive.org/web/20130531031212/http://perfectionkills.com/those-tricky-functions/) – Bergi

0
function stringify(source) { 
    if (typeof (source) == "object") { 
     var str = "{"; 
     for (var key in source) { 
      var value = source[key]; 
      str += key + ":" + stringify(value) + ","; 
     } 
     return str.substring(0,str.length-1) + "}"; 
    } 
    return source.toString(); 
} 

然後

console.log(stringify(obj)); 
// writes "{a:1,b:function(){return 'b'}}" 

Demo in jsFiddle

+1

我覺得這是更復雜比起那個來說。對於初學者來說,它不能正確處理字符串。 – georg

+0

你可以很容易地添加'if(typeof(source)==「string」)...' –