Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.03.2016, 13:57
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 08.03.2016
Сообщений: 429

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

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

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

Или если в объекте нету ключей, то код, который находится в цикле игнорируется?
Ответить с цитированием
  #2 (permalink)  
Старый 08.03.2016, 14:19
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

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));
Ответить с цитированием
  #3 (permalink)  
Старый 08.03.2016, 14:41
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 08.03.2016
Сообщений: 429

Как то сложно
Ответить с цитированием
  #4 (permalink)  
Старый 08.03.2016, 14:46
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

DivMan,
https://learn.javascript.ru/native-prototypes
Ответить с цитированием
  #5 (permalink)  
Старый 08.03.2016, 14:50
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 08.03.2016
Сообщений: 429

Ну получается, если в объекте нету ключей, то код, который находится в цикле игнорируется?
Ответить с цитированием
  #6 (permalink)  
Старый 08.03.2016, 15:14
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

DivMan,
если вы не определяли в Object.prototype свои методы и свойства или определяли, но указали в дескрипторе объекта enumerable : false, считайте что так.
Ответить с цитированием
  #7 (permalink)  
Старый 08.03.2016, 20:11
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 08.03.2016
Сообщений: 429

Ещё 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, потому что оно записалось последним.
Почему выводит максимальное, как это рассчитывает?
Ответить с цитированием
  #8 (permalink)  
Старый 08.03.2016, 20:23
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

Цитата:
Третье условие true, значит переменная max перезаписывается на значение 250.
А с каких это пор 250 больше чем 300?
Ответить с цитированием
  #9 (permalink)  
Старый 08.03.2016, 20:37
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 08.03.2016
Сообщений: 429

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

Я хочу узнать, почему он вычисляет наибольшее значение, а не выводит последнее.
Ответить с цитированием
  #10 (permalink)  
Старый 08.03.2016, 20:40
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 08.03.2016
Сообщений: 429

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перебор объектов и вывод значений SeeJ jQuery 6 01.12.2015 10:27
Как найти точки соприкосновения двух объектов в RaphaelJS Fatalityap Библиотеки/Тулкиты/Фреймворки 3 03.08.2012 16:33
Перебор массива объектов Триви jQuery 12 26.08.2011 09:22
Перебор свойвств и методов объектов Иваннн Events/DOM/Window 8 27.08.2010 15:11
Быстрый поиск объектов Shasoft Общие вопросы Javascript 7 30.07.2009 05:28