0

$scope.propertyそのため、 aを別の変数の値として定義してコピーしています。そのvar query値を更新すると、 の値がvar query変更されます$scope.property

これはなぜ起こり、どうすれば回避できますか?

私のコードは次のようになります。

var query = $scope.property;
if(condition) {
    console.log($scope.property);
    $.extend(query, anotherObj);
    console.log($scope.property);
}

コンソールの出力は次のようになります。

> Object {details-type: "order", details-bind_date_formatted: "03/19/2013"}
> Object {details-type: "order", details-bind_date_formatted: "03/19/2013", details-state: "CA"}

バニラ JavaScript でこの問題に遭遇したことはありません。

4

2 に答える 2

2

なぜこれが起こるのですか

気づいたquery === $scope.property?どちらもまったく同じオブジェクトを参照しており、2 つのログ ステートメント間で変更します。

どうすればこれを回避できますか?

これをどのように回避したいですか?queryオブジェクトのクローンになると思いますか? 次に、JavaScript オブジェクトを正しく複製するにはどうすればよいですか? を参照してください。またはJavaScript でオブジェクトをディープ クローンする最も効率的な方法は何ですか? そのために。

バニラ JavaScript でこの問題に遭遇したことはありません。

jQuery はバニラ JS のみで構築されているため、可能性は低いです。

var scope = {a:{b:1}};
var a = scope.a;
console.log(scope.a); // or just log(a);
a.c = 0; // or scope.a.c = 0;
console.log(scope.a); // or just log(a);
于 2013-03-20T19:54:27.853 に答える
2
var query = angular.copy($scope.property);
于 2013-06-13T08:35:41.607 に答える