簡體   English   中英

JSON.parse()Reviver函數的奇怪行為

[英]Strange behavior of JSON.parse() reviver function

我正在使用JSON.parse()的第二個參數來修改結果,但是我不太清楚函數參數的順序及其工作方式

我已經閱讀了有關使用reviver函數的文檔(例如https://www.ecma-international.org/ecma-262/6.0/#sec-json.parsehttps://developer.mozilla.org/en -US / docs / Web / JavaScript / Reference / Global_Objects / JSON / parse )。 據我了解,此功能將與對象一起使用,第一個參數是鍵或屬性名稱,第二個功能是值或屬性值。 我不明白的是函數的返回值。

這是示例中所做的

 var obj1 = '{"a":1, "b":42}'; let text = JSON.parse(obj1, (key, value) => { if (typeof value === 'number'){ return value * 2 } else{ return value } } ) console.log(text) // {"a": 2, "b": 84} 

這個工作很好。 但是當我嘗試修改代碼時,因為我知道所有值都已經是數字

 var obj1 = '{"a":1, "b":42}'; let text = JSON.parse(obj1, (key, value) =>{ return value * 2 }) console.log(text) // NaN 

對於我來說很奇怪,為什么當我刪除return value它不起作用。 我的意思是,對於該函數,當我對value*2運算時,沒有一個值返回未定義。 然后,我嘗試另一個測試

  var obj1 = '{"a":1, "b":42}'; let text = JSON.parse(obj1, (key, value) => { if (typeof value === 'number'){ console.log('This is in if',key, value) return value * 2 } else{ console.log('This is in else', key, value) return value } } ) console.log(text) 

else語句中的代碼即使由於條件不正確而假定不運行時,也會發生另一個奇怪的事情。 並且當它運行時,它甚至會打印出obj1對象,我沒有在語句中包含該對象。

因為它還會遍歷{"a":1, "b":42}它將從大多數嵌套級別開始,然后將返回原始值本身,即{"a":1, "b":42}

根據MDN

如果指定了Reviver,則通過解析計算的值將在返回之前進行轉換。 具體而言,計算值及其所有屬性(從嵌套最多的屬性開始,一直到原始值本身)都通過齊整器運行

順便說一下,您可以縮短功能。

 var obj1 = '{"a":1, "b":42}'; let text = JSON.parse(obj1, (_, value) => value * 2 || value) console.log(text) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM