Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Инкремент и декремент (https://javascript.ru/forum/misc/51877-inkrement-i-dekrement.html)

soltx 23.11.2014 15:35

Инкремент и декремент
 
Привет! Накидайте задачек для закрепления материала http://learn.javascript.ru/task/inkr...ent-1708223838

bes 23.11.2014 18:52

объясни почему этот код не работает
var a = 1++;
alert(a);

BaBaKa 23.11.2014 20:15

потому что все нормальные люди напишут:
var a =2;
alert(a);

или
alert(2);

danik.js 23.11.2014 20:29

BaBaKa, по-твоему некий код может не работать только потому, что кто-то пишет какой-то другой код? :D

soltx 23.11.2014 21:03

Цитата:

Сообщение от bes (Сообщение 342516)
объясни почему этот код не работает
var a = 1++;
alert(a);

Инкремент/декремент можно применить только к переменной.

krutoy 23.11.2014 21:21

bes,
Потому что число является иммутабельным объектом? Соответственно, такой синтаксис является недопустимым. Только я не понимаю, нахрена, чтобы продемонстрировать это, нужно присваивание? При какой п*де тут оно?
++1

krutoy 23.11.2014 21:30

Цитата:

Сообщение от bes
var a = 1++;
alert(a);

И у тебя там ничего не записывается в переменную, твой алерт вообще не выполняется. Ошибка вываливается при инкременте, до присваивания даже не доходит, не то что до алерта
var a = 1++;
alert("something else");

soltx 23.11.2014 21:55

bes скинул задачку, как пример "объясни почему этот код не работает" некоторых понесло не туда и не в тему, ладно тему можно закрыть сам напридумывал.

krutoy 23.11.2014 22:14

Цитата:

Сообщение от soltx
объясни почему этот код не работает

Ага, объясни, почему этот код не работает:
throw "ERROR"
var rows=document.getElementsByTagName("tr");var j=0;var row=false;var item=false;var imglist=false;var attr="";var change=false;var found=false;var tcat=false;for(var i=0;i<rows.length;i++)
{row=rows[i];if(!row.className||row.className=='')
{change=false;tcat=false;for(j=0;j<row.childNodes.length;j++)
{item=row.childNodes[j];if(item.className&&item.className=='thead')
{change=true;}
if(item.className&&item.className=='tcat')
{if(tcat)
{item.className='tcat tcat2';}
tcat=true;}}
if(change)
{row.className='thead-row';imglist=row.getElementsByTagName("img");for(j=0;j<imglist.length;j++)
{attr=imglist.item(j).src;if(attr.indexOf('menu_open.gif')>0)
{attr=attr.replace(/menu_open.gif/,'menu_open2.gif');imglist.item(j).src=attr;}}}}
if(row.className&&row.className=='vbmenu_dark')
{imglist=row.getElementsByTagName("img");for(j=0;j<imglist.length;j++)
{attr=imglist.item(j).src;if(attr.indexOf('menu_open.gif')>0)
{attr=attr.replace(/menu_open.gif/,'menu_open2.gif');imglist.item(j).src=attr;}}}}
item=document.getElementById('posts');if(item)
{rows=item.getElementsByTagName('table');if(rows&&rows.length>1&&rows[1].className&&rows[1].className==='tborder')
{rows[1].style.borderTopWidth='0';}}
item=document.getElementById('post');if(item&&item.className&&item.className==='tborder')
{item.style.borderTopWidth='0';}
ca_parse_bbcode_block(document);function ca_parse_bbcode_block(parent)
{rows=parent.getElementsByTagName("table");for(i=0;i<rows.length;i++)
{ca_parse_bbcode_table(rows[i]);}}
function ca_parse_bbcode_table(row)
{return
if(row.className&&row.className=='bbcode-rounded bbcode-rounded-code')
{item=row.parentNode;if(item.offsetWidth==row.offsetWidth&&item.offsetWidth>0)
{change=row.offsetWidth- 40;if(item.className&&item.className=='bbcode-rounded-content')
{change=change- 10;}
row.style.width=change+'px';imglist=row.getElementsByTagName('pre');if(imglist.length)
{imglist[0].style.width=(change- 8)+'px';}}
else
{change=item.offsetWidth- 40- row.offsetWidth;if(change>10)
{if(item.className&&item.className=='bbcode-rounded-content')
{change=change- 10;}
row.style.width=(row.offsetWidth+ change)+'px';imglist=row.getElementsByTagName('pre');if(imglist.length)
{imglist[0].style.width=(imglist[0].offsetWidth+ change- 8)+'px';}}}}
if(row.className&&row.className=='bbcode-rounded bbcode-rounded-quote')
{item=row.parentNode;if(item.offsetWidth==row.offsetWidth&&item.offsetWidth>0)
{change=row.offsetWidth- 40;if(item.className&&item.className=='bbcode-rounded-content')
{change=change- 10;}
row.style.width=change+'px';}
else
{change=item.offsetWidth- 40- row.offsetWidth;if(change>10)
{if(item.className&&item.className=='bbcode-rounded-content')
{change=change- 10;}
row.style.width=(row.offsetWidth+ change)+'px';}}}}
var ca_bbcode_parsed=true;

bes 23.11.2014 22:16

Цитата:

Сообщение от soltx
bes скинул задачку, как пример "объясни почему этот код не работает" некоторых понесло не туда и не в тему, ладно тему можно закрыть сам напридумывал.

здесь принят хороший стиль - темы закрываются только в исключительных случаях ;)
или что, попросил заданий, а, не решив и первого, сразу в кусты?


Цитата:

Сообщение от soltx
Инкремент/декремент можно применить только к переменной.

для понимания того как работают конструкции javascript этого слишком мало

подсказываю
http://es5.javascript.ru/x11.html#x11.3
Цитата:

PostfixExpression :
LeftHandSideExpression
LeftHandSideExpression [no LineTerminator here] ++
LeftHandSideExpression [no LineTerminator here] --
http://es5.javascript.ru/x11.html#x11.3.1
Цитата:

Для вычисления PostfixExpression : LeftHandSideExpression [no LineTerminator here] ++ выполняются следующие шаги:
http://es5.javascript.ru/x11.html#x11.2
Цитата:

LeftHandSideExpression :
NewExpression
CallExpression

NewExpression :
MemberExpression
new NewExpression

MemberExpression :
PrimaryExpression
FunctionExpression
MemberExpression [ Expression ]
MemberExpression . IdentifierName
new MemberExpression Arguments
http://es5.javascript.ru/x11.html#x11.1
Цитата:

PrimaryExpression :
this
Identifier
Literal
ArrayLiteral
ObjectLiteral
( Expression )
http://es5.javascript.ru/x7.html#x7.8
Цитата:

Literal ::
NullLiteral
BooleanLiteral
NumericLiteral
StringLiteral
RegularExpressionLiteral
то есть, исходя из первой строчки алгоритма, там могут быть числовые литералы
вывод - ищи ответ в последующих строчках


Часовой пояс GMT +3, время: 17:42.