Следующие два разных фрагмента кода мне кажутся эквивалентными:
var myArray = Array();
myArray['A'] = "Athens";
myArray['B'] = "Berlin";
и
var myObject = {'A': 'Athens', 'B':'Berlin'};
потому что они оба ведут себя одинаково, а также typeof(myArray) == typeof(myObjects)
(оба дают «объект»).
Есть ли разница между этими вариантами?
javascript
arrays
object
javascript-objects
Prinzdezibel
источник
источник
title
,description
иitems
свойствами. Все зависит от того, насколько хорошо вы знаете язык и как вы им пользуетесь.В JS массивы - это объекты, только слегка измененные (с еще несколькими функциями).
Такие функции, как:
источник
Мне кажется, я слишком метафоричен и загадочен с предыдущим ответом. Уточнение следует.
Экземпляр Array, Boolean, Date, Function, Number, RegExp, String является объектом, но с добавлением методов и свойств, специфичных для каждого типа. Например, массив имеет предопределенное
length
свойство, а универсальные объекты - нет.отображает
По сути, интерпретатор FF Gecko также различает массивы и общие объекты с четкими различиями при оценке языковых конструкций.
отображение
и
0 1 2 a
и0 1 2 a
.Что касается утверждения, что все объекты являются функциями:
Ни синтаксически, ни семантически не корректно использовать произвольный экземпляр объекта в качестве функции, такой как
123()
or"abc"()
or[]()
or{}()
orobj()
whereobj
является любым типом, кромеFunction
, поэтому произвольный объект INSTANCE не является aFunction
. Однако, учитывая объектobj
и его типArray, Boolean, Date, ...
, как оноobj
появилосьArray, Boolean, Date, ...
? Что такоеArray, Boolean, Date, ...
?отображает
В каждом случае, без двусмысленности, тип объекта проявляется как
function
определение, отсюда и утверждение, что все объекты являются функциями! (Ирония в том, что я намеренно скрыл и размыл различие между экземпляром объекта и его типом! Тем не менее, это показывает, что «у вас не может быть одного без другого», объекта и функции! Заглавные буквы подчеркивают тип как в отличие от экземпляра.)И функциональная, и объектная парадигмы кажутся фундаментальными для программирования и реализации встроенных примитивов низкого уровня интерпретатора JS, таких как
Math
иJSON
иtrue
.отображает
Во время разработки Javascript в моде был объектно-ориентированный стиль программирования (ООП - стиль объектно-ориентированного программирования - «s» - это мой собственный каламбур!), И интерпретатор был также назван Java, чтобы придать ему большее доверие. . Методы функционального программирования были отнесены к более абстрактным и эзотерическим экзаменам, изучающим теории автоматов, рекурсивных функций, формальных языков и т. Д., И как таковые не были приемлемыми. Однако сильные стороны этих формальных соображений явно проявляются в Javascript, особенно в том виде, в котором они реализованы в движке FF Gecko (т.е.
.toSource()
).Определение объекта для функции особенно приятно, так как оно определено как рекуррентное отношение! определяется с использованием собственного определения!
function Function() { [native code] }
и поскольку функция является объектом, то же самое относится и к
function Object() { [native code] }
.Большинство других определений стабилизируются до статического конечного значения. Однако
eval()
это особенно мощный примитив, поэтому String также может включать произвольные функции.Еще раз обратите внимание, что используемый выше жаргон скрывает различие между типом объекта и экземпляром.
источник
В JavaScript все объекты, кроме примитивных типов.
Код
создает экземпляр объекта Array, пока
создает экземпляр объекта Object.
Попробуйте следующий код
Таким образом, вы увидите разницу в типе конструктора объекта.
Экземпляр объекта Array будет содержать все свойства и методы прототипа Array.
источник
источник
Вы можете добавлять именованные свойства практически ко всему в javascript, но это не значит, что вы должны это делать.
Array
в javascript следует использовать как список, если вы хотите использоватьObject
вместо этого ассоциативный массив .Помните, что если вы действительно хотите использовать
Array
именованные свойства вместоObject
этих свойств, они не будут доступны вfor...of
цикле, и вы также можете получить неожиданные результаты, когда JSON кодирует его для передачи. См. Пример ниже, где игнорируются все нечисловые индексы:источник
{}
-Notation просто синтаксический сахар , чтобы сделать код более хорошим ;-)В JavaScript есть много похожих конструкций, таких как построение функций, где function () - это просто синоним для
источник
{}
это буквальное обозначение объекта,[]
это буквальный массив, я не уверен, в чем смысл вашего ответа.