无法从 javascript 中的对象获取属性,但在记录其父级时可以将其打印到控制台

Unable to get attribute from object in javascript but can print it to the console when logging its parent

本文关键字:控制台 打印 记录 javascript 对象 属性 获取      更新时间:2023-09-26
无法

从javascript中的对象获取属性,但我可以在记录其父级时将其打印到控制台。它确实看起来像一个普通的物体。为什么我无法访问_id?

下面的代码在一个函数中:在我的角度视图中提交表单时调用$scope.create = function() {<form class="form-horizontal" data-ng-submit="create()" novalidate>

所以问题来了,在我的函数中创建:

     console.log($scope.account);
      var tmp=$scope.account;
      console.log('id:' +tmp._id);

给我:

      {"user":{"displayName":"David Karlsson","_id":"548217e5402b8b8c194d9c11"},"_id":"5483235cc0d8580000152f0b","__v":0,"created":"2014-12-06T15:40:12.682Z","amount":0,"interests":[{"rate":123,"date":"2014-12-30T23:00:00.000Z","_id":"5483235cc0d8580000152f0c"}],"desc":"","name":"Acount"}
      id:undefined

更改发布方法无济于事:

    $scope.create = function() {
        // Create new Income object
      var copy = Object.assign({}, this.account);
      console.log(copy);
    }

给:

类型错误:未定义不是函数 at Scope.$scope.create (localhost:3000/modules/incomes/controllers/incomes.client.controller.js:12:29( at localhost:3000/lib/angular/angular.js:10880:21 回调时 (OCALHOST:3000/lib/Angular/Angular.js:19237:17( at Scope.$eval (localhost:3000/lib/angular/angular.js:12788:28( at Scope.$apply (localhost:3000/lib/angular/angular.js:12886:23( at HTMLFormElement.(本地主机:3000/lib/angular/angular.js:19242:23( at localhost:3000/lib/angular/angular.js:2853:10 at forEach (localhost:3000/lib/angular/angular.js:325:18( at HTMLFormElement.eventHandler (localhost:3000/lib/angular/angular.js:2852:5(

这是因为某些代码在调用 console.log 之后$scope.account更改,但在显示对象之前。

例如:

var obj = {prop: {}};
console.log(obj.prop);   // Produces {foo: "bar"}
var cached = obj.prop;
console.log(cached.foo); // Produces undefined
obj.prop.foo = 'bar';

缓存的值不会发生这种情况,因为它是字符串而不是对象。

要修复它,您可以使用 EcmaScript6 Object.assign来"复制"您的对象:

var obj = {prop: {}};
console.log(Object.assign({}, obj.prop)); // Produces {}
var cached = obj.prop;
console.log(cached.foo);                  // Produces undefined
obj.prop.foo = 'bar';