2015-05-04 2 views
2

Я учусь программировать в Javascript, и мне нужна помощь/разъяснение.Javascript: вызов функции в литературе объекта

Я объявил массив, содержащий имена животных. Я определил функцию, которую я использую, чтобы разделить строку на две части. Затем я создаю пустой литерал объекта и добавляю животное и соответствующую породу. Я пытаюсь вызвать функцию separateWords в объектном литерале, но мне нужно уточнение. Вот мой код:

var myPets = ["Bengal Bobcat", "Beagle"]; 

var separateWords = function (string) { 
    return string.split(" "); 
}; 

var nameCollection = {}; 
nameCollection.cat = separateWords(myPets[0]); 
nameCollection.dog = myPets[1]; 
nameCollection.fish = null; 

Когда я вхожу console.log (nameCollection) я получаю следующее:

Object {cat: Array[2], dog: “Beagle”, fish: null} 
cat: Array[2] 
0: "Bengal" 
1: "Bobcat" 
length: 2 

Однако, когда я вхожу console.log (separateWords (myPets [0])), Я вижу:

[“Bengal”, “Bobcat”] 

Я не понимаю, почему значение кошки появляется как массив [2].

+2

Вот как это делает консоль. Он по-прежнему представляет собой массив с двумя элементами, которые вы можете проверить дальше. – elclanrs

+1

, если вы нажмете на слово 'Array', оно будет расширяться, чтобы отобразить его содержимое. Оно отображает только примитивные типы. (string, number, boolean, null, undefined). Это просто то, как работает отладчик, ничего плохого в вашем коде или том, как он хранится. –

+0

Это всего лишь короткий способ отобразить его браузером. Firefox тоже делает это. В Firefox вы можете просто нажать «Массив», чтобы увидеть значения. – Xufox

ответ

-3

Это просто, как работает javascript (и многие другие языки). Когда вы пытаетесь напечатать «nameCollection», javascript автоматически не выполняет хорошую работу по печати массива cat. Вместо этого он просто печатает некоторую информацию, относящихся к типу, который в данном случае говорят «кошка» представляет собой массив длину 2.

+2

Нет, это не так *** JavaScript *** работает, вот как работает *** консольный выход ***. – Xufox

+0

Эй, если вы удалили свой ответ, вы получите бронзовый значок «Peer Pressure». =) – Xufox

0

Вы присваиваете cat результат вызова в separateWords() функции, передавая myPets[0] в качестве параметра.

separateWords() возвращает массив, и с входом myPets[0] он возвращает новый массив с "Bengal" и "Bobcat" значений расщепленных на пробельных.

Функция split() - это та, которая создает массив с разделенными значениями, и этот результат возвращается вашей функцией separateWords(), которая также является значением, назначенным объекту-объекту cat.

-1

String.prototype.split() возвращает массив, содержащий два значения в строке, которые были разделены. Read through this.

nameCollection.cat = separateWords(myPets[0])[0]; // nameCollection.cat == Bengal 
nameCollection.cat = separateWords(myPets[0])[1]; // nameCollection.cat == Bobcat 
+0

К сожалению, это не отвечает на вопрос. – Xufox

2

Консоль отображает его как массив [2], как это будет (потенциально) нечитаемым, если он полностью расширил его. Один из способов, чтобы увидеть все это stringify его с помощью JSON.stringify которая проходит через каждый элемент в объекте рекурсивно и вызывает toString() на нем:

var myPets = ["Bengal Bobcat", "Beagle"]; 
 

 
var separateWords = function (string) { 
 
    return string.split(" "); 
 
}; 
 

 
var nameCollection = {}; 
 
nameCollection.cat = separateWords(myPets[0]); 
 
nameCollection.dog = myPets[1]; 
 
nameCollection.fish = null; 
 

 
document.body.textContent = JSON.stringify(nameCollection);

+0

Священная корова, это может быть первый раз за неделю. Я видел, как кто-то правильно использует виджет встроенного кода. –

+0

Я только что вернулся после долгого перерыва, и я думаю, что это фантастика. 'document.body.textContent' является вашим другом :) –

+0

Нет. Я имею в виду, что многие люди используют его для выделения кода, а не просто * выделяют код *. Так что он работает ... ничего. –

0

Каждый браузер реализует свою консоль, как он хочет.

Итак, ваш браузер решил реализовать описанное вами поведение.

Если вам это не нравится, предложите лучшую идею разработчикам этого браузера. Или используйте другой браузер.

0

Я собираюсь предположить, что вы используете Chrome Developer Tools или Firebug.

Инструменты разработчика конструируют массивы и объекты в легко читаемые строки, которые вы затем проверяете дальше.Я имею в виду, вы нажимаете маленькую стрелку рядом с каждой строкой в ​​журнале консоли для дальнейшего осмотра каждого объекта. Я буду использовать фотографии, чтобы объяснить это.

Здесь я задаю массив, а затем назначить элемент в объекте к этому массиву, как так:

enter image description here

Как вы можете видеть, когда я вхожу объект это показать это массив [2], а чем развернуть массив. На следующем рисунке я развернул массив, чтобы проверить его.

enter image description here

Почему это точно? Моя первая мысль - легкость чтения. Если у вас есть сложное приложение, и у вас есть множество журналов консоли отладки, вы можете увидеть все журналы в одиночных линиях, что облегчает поиск определенных журналов. Кроме того, если у вас очень большой и сложный объект, то, возможно, легче прочитать все корневые элементы в каждой строке без расширения всех объектов и массивов, найденных внутри этого объекта, рекурсивно.