簡體   English   中英

JSON.parse Reviver函數:是否訪問正在恢復的對象?

[英]JSON.parse Reviver function: Access to object being revived?

我想確認關於此引用的行為,以及使用齊磊功能修改對象中的鍵(而不僅僅是值)的能力。

如果我使用函數 (key,value {...}而不是使用箭頭函數(key,value)=> {...}來傳遞reviver函數,則此引用似乎是指要恢復的對象 。 JSON中的子對象也是如此,我在服務器上的node.js 8.x和客戶端上的Chrome當前都看到了這一點。

可以理解,如果我將該函數作為箭頭函數傳遞,則將保留調用上下文。

我在解析JSON時依靠它來添加和刪除一些鍵。

我可以依靠這種行為嗎?

var aTestStr = '{"prop1": "this is prop 1",'
    +'"prop2": {"prop2A": 25, "prop2B": 13, "prop2C": "This is 2-c"}'
                +'}';
var aTestObj = JSON.parse(aTestStr, function(key, value) {
    //at this point, this refers to the object being revived
    //E.g., when key == 'prop1', this is an object with prop1 and prop2
    //when key == prop2B, this is an object with prop2A, prop2B and prop2C
    //So is this code reliable?
    if (key == this.prop2B) {
        //Do something, add a prop to this:
        this.prop2BDif = 100 - this.prop2B;
    }
});

是的,它已被記錄在文檔中: MDN中的JSON.parse文檔

如果指定了Reviver,則通過解析計算的值將在返回之前進行轉換。 具體而言,計算值及其所有屬性(從嵌套最多的屬性開始,一直到原始值本身)都通過規則運算器運行。 然后調用它,對象包含按此方式處理的屬性 ,屬性名稱為字符串,屬性值作為參數。

暫無
暫無

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

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