私はangular constantsで遊んでいます。 constant
の値を変更できることを確認しています。私はそれを得ることができません。なぜ私は値を変更することができます。私はこのような定数を作成しています:なぜ角度定数を変更できるのですか?
var app = angular.module('app', []);
app.constant('Type', {
PNG: 'png',
GIF: 'gif'
});
app.constant('serialId', 'aRandomId');
私もその後、angular.value
を使用して定数を作成する場合でも、私はそれを変更することができています。定数の値を変更するには、私は私のコントローラでこれをやっている:
app.controller('MainController', ['$scope', 'Type', 'serialId', '$timeout', function($scope, Type, serialId, $timeout) {
$scope.data = {
type: Type,
serialId: serialId
};
$timeout(function() {
Type.PNG = 'this is changed';
serialId = 'new Serial Id';
console.log(serialId);
}, 1000);
}]);
を、一定のdefinationことで、私が取得することは一定であることは、その値は変更されませんsomehtingあり、それは一定の値を持ちます。 MDNは、定数を宣言すると、定数がオブジェクトでない場合は変更できないと言います。例えば。
const x=10;
x=20;//will throw the error.
const obj={};
obj.a='ab'; //will not throw error.
ただし、値を変更する角度定数の場合は何も起こりません。値が変更されたことを通知することさえありません。また、定数の値を変更することについてのドキュメントもありません。 プレーンなjavascript変数のような角定数の値を変更できるのであれば、なぜそれを定数といいますか?はここに違いあります
'const'では、"定数 "の唯一の部分はオブジェクトへの参照なので、オブジェクトを別のものに置き換えることはできません。ただし、オブジェクト自体は変更可能なままであり、そのプロパティは引き続き変更できます。 ['Object.freeze()'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze)は、オブジェクトを不変にします(ただし、再帰的に行う)。 –
'Object.freeze(obj)'を実行すると、オブジェクトのプロパティを変更できなくなりますか?はいの場合、なぜ角チームはそれをやっていないのですか?誰もが変わらないようにします。 –