Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Перебор объектов (https://javascript.ru/forum/misc/61780-perebor-obektov.html)

DivMan 08.03.2016 13:57

Перебор объектов
 
https://jsfiddle.net/ou6q8za6/1/

Я не понимаю, как это работает.

Почему сначала выскакивает последний return, а не тот, который вложенный в перебор ключей?

Или если в объекте нету ключей, то код, который находится в цикле игнорируется?

destus 08.03.2016 14:19

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 08.03.2016 14:41

Как то сложно

destus 08.03.2016 14:46

DivMan,
https://learn.javascript.ru/native-prototypes

DivMan 08.03.2016 14:50

Ну получается, если в объекте нету ключей, то код, который находится в цикле игнорируется?

destus 08.03.2016 15:14

DivMan,
если вы не определяли в Object.prototype свои методы и свойства или определяли, но указали в дескрипторе объекта enumerable : false, считайте что так.

DivMan 08.03.2016 20:11

Ещё 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, потому что оно записалось последним.
Почему выводит максимальное, как это рассчитывает?

destus 08.03.2016 20:23

Цитата:

Третье условие true, значит переменная max перезаписывается на значение 250.
:blink: А с каких это пор 250 больше чем 300?

DivMan 08.03.2016 20:37

Я не писал, то, что 250 больше чем 300.

Я хочу узнать, почему он вычисляет наибольшее значение, а не выводит последнее.

DivMan 08.03.2016 20:40

Я кажись понял, когда в переменную max попало значение 300, то при сравнение с 250, условие становится false и переменная не перезаписывается. :dance:


Часовой пояс GMT +3, время: 23:45.