爲了學習Angular 2,我在使用SystemJS時使用Angular CLI做了Connect Four game。爲什麼JSON.parse更改嵌套數組中的值?
我複製的努力從頭開始用新的基於的WebPack-CLI和我有一個奇怪的問題......
下面的方法與接收JSON編碼的數據串並初始化一個新的遊戲實例與它。我增加了一些console.log
,藉以說明問題:
export class ConnectFourGameModel {
static fromJSON(jsonString: any): ConnectFourGameModel {
let jsonData = JSON.parse(jsonString);
console.log('*** from JSON (compare the "columns" array between jsonString and jsonData below) ***');
console.log('jsonString: ', jsonString);
console.log('jsonData: ', jsonData);
...
return result;
}
在運行此,第一console.log
顯示JSON字符串正確:
jsonString:
{... Several fields here ...
"columns":[[0,0,0,0,0,1],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0]]
}
但第二console.log
,這是調用JSON.parse
而造成的此字符串,看似隨機改變的值:
jsonData:
> Object {... Several fields here ...
> columns: Array[15]
V 0: Array[6]
0: 2 <-- Should be 0
1: 2 <-- Should be 0
2: -1 <-- Should be 0
etc...
這是爲什麼HAPP效果圖創作?
如果您使用load the app on Github Pages,您可以更好地看到它,在瀏覽器上打開JavaScript控制檯,然後單擊任何列進行移動。
庫是在Github上:https://github.com/cmermingas/connect-four-webpack
我看了這裏的問題就解析嵌套的數組與JSON.parse但我不能涉及這個問題我發現的。
非常感謝!
你改變數據。通過'console.log'顯示的對象是* live *,因此即使在記錄之後也會顯示對其屬性所做的更改 – Phil
@Phil說什麼。如果你在'console.log'行設置了一個斷點,你還可以檢查'jsonData',在這裏你可以看到它確實是'jsonString'的1:1解碼。 – Siguza