AngularJS' $rootScope.无法创建内部变量

AngularJS' $rootScope. Unable to create internal variable

我正在使用 $rootScope.requestObj 来存储代表某些过滤器的 key:values 对象。

我的所有应用程序 $rootScope.requestObj 都被视为单例,并且其行为符合预期。

但是,当调用外部 API 时,我创建了一个接收 $rootScope.requestObj 作为参数的服务。

这是我的代码:

 function requestHandler(obj /*In my controller I am passing $rootScope.requestObj*/) {

        var internal_object = obj;

        console.log('BEFORE FILTER = ', JSON.stringify($rootScope.requestObj));

        Object.keys(internal_object).forEach(function (key) {
            if (key != 'limit' && key != 'offset' && key != 'cities') {
                internal_object[key] = null;
            } else {
                if (key == 'limit') {
                    internal_object[key] = REQUEST_LIMIT.simplyRETS; //outputs 500 that is simplyRETS limit for a request.
                }
            }
        });
        console.log('AFTER FILTER = ', JSON.stringify($rootScope.requestObj));
       //Rest of the code, I basically serialize the internal_object and send it
       //as params of a $http.get request.

如您所见,我正在将 $rootScope.requestObj 传递给我的 internal_object 我遍历内部对象,从不修改实际的 $rootScope.requestObj。仍然是第一个 console.log 输出这个:

请注意'maxprice'值。

BEFORE FILTER =  {"type":null,"minprice":null,"maxprice":2,"minbeds":null,"maxbeds":null,"minbaths":null,"maxbaths":null,"minarea":null,"maxarea":null,"limit":500,"offset":0,"cities":"Aventura","q":null}

第二个这个=

AFTER FILTER =  {"type":null,"minprice":null,"maxprice":null,"minbeds":null,"maxbeds":null,"minbaths":null,"maxbaths":null,"minarea":null,"maxarea":null,"limit":500,"offset":0,"cities":"Aventura","q":null}

不知何故,在我从 INTERNAL_OBJECT 中删除所有非限制、偏移或城市的小迭代中,我的 $rootScope.requestObj 发生变化并输出不同的值。

在这里,为了简单起见,我只是使用 maxprice 进行测试。我正在使用 JSON.stringify() 获取对象值的标记。

我相信在我的 internal_object 和我的 $rootScope.requestObj 对象之间仍然有一个 link。但是,不确定为什么以及如何避免它。

编辑

我之所以感到困惑,是因为我假设 var internal_object 正在内存中创建新的 space。正如所解释的那样,它正在创建一个引用。

实际上,这是预期的行为,当您使用 "var internal_object = obj;" 时,您将 obj 的内存引用分配给 internal_object,然后更改 internal_object 的值,这是 obj 的相同引用。 如果您使用 angular,只需使用 "var internal_object = angular.copy(obj);",因此它会复制对象,而不是使用相同的内存引用。