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, верно, тогда можно обернуть условие в скобки:
$(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});
}
});
Цитата:
var ids = {69: 'exort', 81: 'quas', 82: 'invoke', 87: 'wex'}, keyCode;
keyCode = 69;
alert(ids[keyCode]);
keyCode = 81;
alert(ids[keyCode]);
Может так понятнее? :) |
Ruslan_xDD,
т.е. выражение (e.keyCode in ids) это просто ещё один способ прямого обращения к значению свойства объекта? Я думал это возможно только через точку и квадратные скобки :-? |
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 |
| Часовой пояс GMT +3, время: 21:24. |