什么是$ $$ hashKey添加到我的JSON.stringify结果

我曾尝试寻找他们的文档的Mozilla JSON stringify页面以及SO和Google的这里,但没有找到任何解释。 我已经使用JSOn很多次,但从来没有遇到过这个结果

我有一个JSON对象数组

[
    {
        "param_2": "Description 1",
        "param_0": "Name 1",
        "param_1": "VERSION 1"
    },
    {
        "param_2": "Description 2",
        "param_0": "Name 2",
        "param_1": "VERSION 2"
    },
    {
        "param_2": "Description 3",
        "param_0": "Name 3",
        "param_1": "VERSION 3"
    }
]

连接到我的$scope ,并以POST他们为我所用的JSON.stringify()方法,一个paramater,我得到以下几点:

   [
        {
            "param_2": "Description 1",
            "param_0": "Name 1",
            "param_1": "VERSION 1",
            "$$hashKey": "005"
        },
        {
            "param_2": "Description 2",
            "param_0": "Name 2",
            "param_1": "VERSION 2",
            "$$hashKey": "006"
        },
        {
            "param_2": "Description 3",
            "param_0": "Name 3",
            "param_1": "VERSION 3",
            "$$hashKey": "007"
        }
    ]

我只是很好奇$$ hashkey究竟是什么,因为我期望stringify方法更类似于以下内容:

[
    {
        "1":{
            "param_2": "Description 1",
            "param_0": "Name 1",
            "param_1": "VERSION 1"
        },
         "2":{
            "param_2": "Description 2",
            "param_0": "Name 2",
            "param_1": "VERSION 2"
        },
         "3":{
            "param_2": "Description 3",
            "param_0": "Name 3",
            "param_1": "VERSION 3"
        }
    }
]

我不确定这是否是一个因素,但我Angularjs 1.1.5, JQuery 1.8.2 and Spring 3.0.4 and Spring security 3.0.7 on the Server side使用Angularjs 1.1.5, JQuery 1.8.2 and Spring 3.0.4 and Spring security 3.0.7 on the Server side

这不会引起任何问题,但我想知道$$hashkey的原因和原因


Angular增加了这个功能来跟踪你的变化,所以它知道什么时候需要更新DOM。

如果您使用angular.toJson(obj)而不是JSON.stringify(obj)那么Angular会为您删除这些内部使用的值。

此外,如果您track by {uniqueProperty}后缀更改重复表达式以使用track by {uniqueProperty} ,Angular将不必添加$$hashKey 。 例如

<ul>
    <li ng-repeat="link in navLinks track by link.href">
        <a ng-href="link.href">{{link.title}}</a>
    </li>
</ul>

只要永远记住你需要“链接”。 表达的一部分 - 我总是倾向于忘记这一点。 track by href肯定无法工作。


在我的使用案例中(将产生的对象提供给X2JS)推荐的方法

data = angular.toJson(source);

帮助删除$$hashKey属性,但结果可能不再由X2JS处理。

data = angular.copy(source);

也删除了$$hashKey属性,但结果仍然可用作X2JS的参数。


它通常带有ng-repeat指令。 做dom操作AngularJS用特殊标识标记对象。

这在Angular中很常见。 例如,如果你用ngResource获得对象,你的对象将嵌入所有的资源API,你会看到诸如$ save等方法。同样,使用cookie时,AngularJS会添加一个属性__ngDebug。

链接地址: http://www.djcxy.com/p/48229.html

上一篇: What is the $$hashKey added to my JSON.stringify result

下一篇: JSON.stringify, avoid TypeError: Converting circular structure to JSON