爲什麼由於輸入爲不同的輸出是不同
。
第一個場景
obj = {a:"asdf"};
var newObj = JSON.parse(JSON.stringify(obj));
這裏JSON.parse
輸入參數JSON.stringify(obj)
,這是一個字符串,讀取{"a":"asdf"}
。
第二場景
var newObj = JSON.parse("{"a":"asdf"}");
這裏JSON.parse
輸入參數是一個字符串,讀取{
,其餘是斷碼。
由於控制檯調試程序決定所有字符串都應該顯示在控制檯上,並以"
封裝,但這只是控制檯告訴您此值爲String類型的一種方式。它不檢查你是否有「內部並逃脫它們。
封裝"
不是字符串的一部分,只是告訴它是一個字符串的一種方式。
如果console.logging JSON.stringify(obj)讓你"{"a":"asdf"}"
嘗試做alert或者document.write。這些不會增加額外的"
,你會看到JSON.stringify(obj)的值實際上是{"a":"asdf"}
,而不是"{"a":"asdf"}"
。
<html><head></head><body>
<script>
function JSONparse(string) {
document.write(string);
alert(string);
console.log(string);
return JSON.parse(string);
}
var obj = {a:"asdf"};
result = JSONparse(JSON.stringify(obj));
</script>
</body></html>
你在調試器中得到的提示給你帶來了困惑。即使你看到'「{」a「:」asdf「}」'這不是一個格式正確的字符串。如果你用一個字符串開頭,那麼你就結束了。這意味着,這裏的字符串只是「{」,其餘的代碼是瀏覽器不知道該怎麼處理的代碼。正如答案中所說的,你可以使用'將整個字符串封裝爲'''''':'asdf'}''或者將內部字符串轉換爲''{\「a \」:\「asdf \」} 「'。 –
我明白你說的是什麼,但是 - JSON.stringify(obj) - 只返回」{「a」:「asdf」}「,那麼它在這種情況下是如何工作的--JSON.parse (JSON.stringify(obj)) –
它沒有,瀏覽器在控制檯輸出它爲''{「a」:「asdf」}「'但它實際上返回一個字符串,它讀取'{」a「:」 asdf「}'。瀏覽器控制檯決定將它封裝在一個」因爲這是字符串的默認控制檯行爲。所以你會閱讀'「{」a「:」asdf「}」'但它實際上是一個值爲「{」a「:」asdf「}'的類型字符串。 –