为什么不能将常量设置为变量本身的对象的属性?
const a = 'constant' // all is well
// set constant property of variable object
const window.b = 'constant' // throws Exception
// OR
var App = {}; // want to be able to extend
const App.goldenRatio= 1.6180339887 // throws Exception
Run Code Online (Sandbox Code Playgroud)
为什么通过引用传递的常数突然变得可变?编辑:我知道应用程序不会(或者更确切地说......)不可变; 这只是一个观察......
(function() {
const App;
// bunch of code
window.com_namespace = App;
}());
window.com_namespace; // App
window.com_namespace = 'something else';
window.com_namespace; // 'something else'
Run Code Online (Sandbox Code Playgroud)
如何使用这些限制来构建一个包含常量的组织良好,可扩展,面向对象的单一命名空间的库?
编辑:我相信zi42,但我只想问为什么
我最近阅读了关于ES6 const关键字的内容,我可以理解它在这样的事情时的重要性:
(function(){
const PI = 3.14;
PI = 3.15; // Uncaught TypeError: Assignment to constant variable
})();
Run Code Online (Sandbox Code Playgroud)
所以,没有人可以改变我的PI变量.
我的误解是我不明白在哪种情况下使用const对象是有意义的(除了阻止人们这样做myObj = newValue;).
(function(){
const obj = {a:1 ,b: 2, c:3};
//obj = {x:7 , y:8, z: 9}
//This is good
//TypeError: Assignment to constant variable.
obj.a=7; obj.b=8 ; obj.c=9;
console.log(obj); //outputs: {a: 7, b: 8, c: 9}
})();
Run Code Online (Sandbox Code Playgroud)
因此,当声明一个对象时:我该说什么时候:现在我必须声明我的对象const?
无论是声明对象const还是let在ES2015中,都不会影响对其属性的赋值:
> let a = {}
undefined
> const b = {}
undefined
> a.y = 3
3
> b.y = 3
3
> a
{ y: 3 }
> b
{ y: 3 }
Run Code Online (Sandbox Code Playgroud)
是否有充分的理由选择一种形式的声明而不是另一种形式?
这可能是一个愚蠢的问题,但我想看看在分配给 CONST 或 LET 变量方面是否有任何最佳实践。我知道 CONST 变量一旦声明就不能重新分配,但我注意到通过将对象分配给 CONST 变量,您可以更新对象的内容。
const person = {
name: "John"
}
console.log(person.name) => //"John"
person.name = "Kim"
console.log(person.name) => //"Kim"
Run Code Online (Sandbox Code Playgroud)
这会被视为不好的做法吗?如果不是,为什么不使用 LET 变量呢?