Перебор объектов
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:
|
Такой способ перебора с помощью for of, это тоже самое, что и через обычный for?
let o = { origin: 100 } let o2 = { origin: 200 } function sum(){ let origin = this.origin; for(let arg of arguments){ origin += arg } } return origin } console.log(sum.call(o, 2,3)) let o = { origin: 100 } let o2 = { origin: 200 } function sum(){ let origin = this.origin; for(var i =0; i < arguments.length; i++){ origin += arguments[i] } return origin } console.log(sum.call(o, 2,3)) |
В первой итерации будет flase, условие не выполняется и переменная не изменяется
Во второй будет true и переменная меняет значение на large В третей итерации условие false, а во второй же итерации, переменная изменила значение и почему же в третей итерации выводится изначально значение? http://plnkr.co/edit/Q1fcLHfd2Z2iIdr9x2tN?p=preview |
DivMan, потому что ты задрал своей тупизной.
var size = 'small'; - это стоит внутри цикла и стало быть объявляется каждый раз. Я понимаю, что по-первости даже самое элементарное не доходит, но ты ведь уже кандидат блин. |
Начни уже решать прикладные задачи, хватит собаководством заниматься. На практике учиться не легче, но зато интереснее.
|
А можешь подкинуть, какую-нибудь задачу?
|
Их тут десятками каждый день подкидывают. Сделай рони. )))
|
Часовой пояс GMT +3, время: 01:17. |