Перебор объектов
https://jsfiddle.net/ou6q8za6/1/
Я не понимаю, как это работает. Почему сначала выскакивает последний return, а не тот, который вложенный в перебор ключей? Или если в объекте нету ключей, то код, который находится в цикле игнорируется? |
DivMan,
ну в schedule есть некоторые унаследованные методы, которые однако неперечислимы, а цикл for..in перебирает только все перечисляемые свойства объекта и его цепочки прототипов. Чтобы увидеть все неперечисляемые поля надо использовать Object.getOwnPropertyNames. function isEmpty(obj) { var result = []; for (objectToInspect = obj; objectToInspect !== null; objectToInspect = Object.getPrototypeOf(objectToInspect)) { result = result.concat(Object.getOwnPropertyNames(objectToInspect)); } //alert(result) //здесь все методы if (result) return "есть"; else return "нету"; } var schedule = {}; alert(isEmpty(schedule)); schedule["8:30"] = "подъём"; alert(isEmpty(schedule)); |
Как то сложно
|
|
Ну получается, если в объекте нету ключей, то код, который находится в цикле игнорируется?
|
DivMan,
если вы не определяли в Object.prototype свои методы и свойства или определяли, но указали в дескрипторе объекта enumerable : false, считайте что так. |
Ещё 1 вопрос, почему выводит максимальное значение?
http://plnkr.co/edit/xwJuT94gQRdOLPISFX7n?p=preview var salaries = { "Вася": 100, "Петя": 300, "Даша": 250 }; var max = 0; for(var key in salaries){ if(salaries[key] > max){ max = salaries[key] } } alert(max) Первое условие true, значит в переменную max записывается значение 100. Второе условие true, значит переменная max перезаписывается на значение 300. Третье условие true, значит переменная max перезаписывается на значение 250. И по моей логике, должно вывести 250, потому что оно записалось последним. Почему выводит максимальное, как это рассчитывает? |
Цитата:
|
Я не писал, то, что 250 больше чем 300.
Я хочу узнать, почему он вычисляет наибольшее значение, а не выводит последнее. |
Я кажись понял, когда в переменную max попало значение 300, то при сравнение с 250, условие становится false и переменная не перезаписывается. :dance:
|
Часовой пояс GMT +3, время: 04:46. |