const
может быть использован для объявления констант:Почему постоянные поля не защищены?
> const a = 42
undefined
> a = 7
7
> a
42
Это круто, но я заметил, что при использовании const
объявить объекты такое поведение больше не работает:
> const b = { foo: { bar: 42 }, baz: 7 }
undefined
> b.baz = { hello: "world" }
{ hello: 'world' }
> b.foo.bar = 7
7
> b
{ foo: { bar: 7 }, baz: { hello: 'world' } }
Как вы можете видеть , Я изменил поле baz
на объект, и я изменил 42
на 7
.
ЧИТАЕТ docs Я вижу это, как ожидается:
// Overwriting the object fails as above (in Firefox and Chrome but not in Safari) MY_OBJECT = {"OTHER_KEY": "value"}; // However, object attributes are not protected, // so the following statement is executed without problems MY_OBJECT.key = "otherValue";
Однако, почему это работает, как это? Какова логика?
С другой стороны, вопрос заключается в следующем: как объявлять постоянные объекты?
сопзЬ только предотвращает переопределение вар, что вы, кажется, хотите непреложный объект, простые JS-объекты не являются - возможно, это (https://github.com/facebook/immutable-js) – birdspider
* const просто предотвращает повторную декларацию var * - но если I * переопределяет * константу, значение не изменяется. Только путем изменения подполя значение изменяется. –
@ IonicăBizău Нет, «значение» объекта является адресом его памяти. – Siguza