Почему команда Object.keys пишется с большой буквы?
Разве все команды в JS не должны записываться с маленькой?
Ответы (1 шт):
Что
Команд в JavaScript нет. А есть тип Object и метод Object.keys().
Object
Тип
Objectпредставляет один из типов данных JavaScript. Он используется для ассоциативных коллекций и более сложных конструкций. Объекты могут быть созданы конструкторомObject()или специальным синтаксисом.
Оригинал:
The
Objecttype 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.