Перебор объектов
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, время: 10:52. |