Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 11.03.2015, 09:03
Аватар для Sigizmund2012
Профессор
Отправить личное сообщение для Sigizmund2012 Посмотреть профиль Найти все сообщения от Sigizmund2012
 
Регистрация: 16.07.2014
Сообщений: 267

Ruslan_xDD
Теперь усё понятно, спасибо, жаль что этот код не работает. Пишем в консоль:
var value = (128 - 3 * false) + 'px'

получаем "128px", всё пучком, но:
var value2 = (128 - 3 * true == true) + 'px'

получаем "falsepx". Это происходит потому, что сначала вычисляются правая и левая части неравенства, в итоге 125 == true возвращает false. В вашем же коде 128-3*e.keyCode == "keydown" тоже вернёт false.
Свойства объекта всё-таки нужно как-то перебрать и для этого тоже используется for in, просто он неявно вызывается.

Последний раз редактировалось Sigizmund2012, 11.03.2015 в 13:56.
Ответить с цитированием
  #12 (permalink)  
Старый 11.03.2015, 16:08
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

Sigizmund2012, верно, тогда можно обернуть условие в скобки:

$(document).on('keydown keyup', function(e) {
    var ids = {69: 'exort', 81: 'quas', 82: 'invoke', 87: 'wex'};
    if(e.keyCode in ids) {
        var value = (128 - 3 * (e.type == 'keydown')) + 'px';
        $('#' + ids[e.keyCode]).css({height: value, width: value});
    }
});


Сообщение от Sigizmund2012
Свойства объекта всё-таки нужно как-то перебрать и для этого тоже используется for in, просто он неявно вызывается.
Да не нужен тут никакой for..in.

var ids = {69: 'exort', 81: 'quas', 82: 'invoke', 87: 'wex'}, keyCode;

keyCode = 69;
alert(ids[keyCode]);

keyCode = 81;
alert(ids[keyCode]);


Может так понятнее?
Ответить с цитированием
  #13 (permalink)  
Старый 11.03.2015, 17:19
Аватар для Sigizmund2012
Профессор
Отправить личное сообщение для Sigizmund2012 Посмотреть профиль Найти все сообщения от Sigizmund2012
 
Регистрация: 16.07.2014
Сообщений: 267

Ruslan_xDD,
т.е. выражение (e.keyCode in ids) это просто ещё один способ прямого обращения к значению свойства объекта? Я думал это возможно только через точку и квадратные скобки
Ответить с цитированием
  #14 (permalink)  
Старый 11.03.2015, 18:27
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

Sigizmund2012, почти. Это проверка на существования свойства в объекте/массиве.

var obj = {foo: 'bar'};

alert('foo' in obj); //true, так как свойство 'foo' есть у объекта

alert('bla' in obj); //false, потому что нет такого свойства у объекта.



Ты можешь писать условия так:
if(obj.foo) {
    ...
}
else {
    ...
}


Но этот способ возвращает нам сразу всё значение obj.foo и потом уже преобразуется в булево. А вот способ ниже сразу возвращает true/false, а значит и работает быстрее, и более правилен.

if('foo' in obj) {
    ...
}
else {
    ...
}


И на заметку: https://msdn.microsoft.com/ru-ru/lib...(v=vs.94).aspx
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Использование комбинаций If-else в одном скрипте alenka_savage Общие вопросы Javascript 2 22.12.2014 19:31
Jquery, Последовательное выполнение функций разных div в одном скрипте. schnitzer Общие вопросы Javascript 3 29.09.2013 02:49
На сколько пикселей произошел скрол страницы like2dev jQuery 4 11.06.2011 09:53
тест на яве скрипте Vinil Общие вопросы Javascript 1 16.05.2011 20:26
IE 6 сколько можно? zzz Internet Explorer 15 18.08.2009 02:57