Почему команда Object.keys пишется с большой буквы?
Разве все команды в JS не должны записываться с маленькой?
Ответы (1 шт):
Что
Команд в JavaScript нет. А есть тип Object
и метод Object.keys()
.
Object
Тип
Object
представляет один из типов данных JavaScript. Он используется для ассоциативных коллекций и более сложных конструкций. Объекты могут быть созданы конструкторомObject()
или специальным синтаксисом.
Оригинал:
The
Object
type represents one of JavaScript's data types. It is used to store various keyed collections and more complex entities. Objects can be created using theObject()
constructor or the object initializer / literal syntax.
Так как Object
это тип, то он пишется с большой буквы.
Object.keys()
Статический метод
Object.keys()
возвращает массив имен собственных перечислимых строковых свойств.
Оригинал:
The
Object.keys()
static method returns an array of a given object's own enumerable string-keyed property names.
Так как keys
– метод, то он пишется с маленькой буквы.
Почему
Потому что нам надо исправить ошибку в библиотеке языка и не сломать старый код.
У объектов, которые словари, изначально не было простого способа перебрать ключи. Вот код для перечисления ключей:
for (var name in myObject) {
if (myObject.hasOwnProperty(name)) {
...
}
}
Если не использовать if
, то в перечисляемые ключи будут попадать не только сами ключи но и имена свойств унаследованных от предков объекта. Чтобы написать код, который будет работать с наследниками Object (а это почти все сложные объекты) и не будет подбирать лишние свойства, надо везде писать этот if
. Громоздко.
Как исправить? Сделать новый for
. Хорошо, в итоге в JavaScript четыре разные формы for
. И иногда нужен список ключей вне for
.
Тогда добавим новые метод! Но этот метод по уму должен быть добавлен во все объекты-наследники Object
. А значит он сломает огромное количество кода, который перечисляет свойства Object
без предохранительного if
внутри. Нельзя.
Тогда добавим новую глобальную функцию! К сожалению, в процессе усовершенствования языка глобальное пространство имён уже изрядно замусорено. Новое простое имя сломает некоторое количество унаследованного кода и увеличит количество мусора. Лучше не надо.
Тогда поместим новый метод в существующее глобальное имя в качестве свойства. Глобальное пространство имён и набор методов в наследниках не изменятся, мы не будем ломать старый код. Лучший выбор – статический метод типа Object
, всё же новый метод имеет отношение к Object
.