2016-09-12 3 views
1

Прямо сейчас я читаю через вас Не знаю Типы JS & Грамматика Ch 4, где я натолкнулся на этот пример по принуждению. https://repl.it/D7w2Порядок операций, когда valueOf называется

var i = 2; 

Number.prototype.valueOf = function() { 
    console.log("called"); //this logs twice 
    return i++; 
}; 

var a = new Number(42); 

if (a == 2 && a == 3) { 
    console.log("Yep, this happened."); //this is logged 
} 

Я не понимаю, почему все не от одного. Так как var i начинается с 2, когда он обращается к == 2, не должен возвращаться 3, а затем не должен возвращаться, когда запускается == 3?

+2

'' я ++ возвращает значение перед приращением –

ответ

4

Нет, потому что вы использовали post-increment. Это возвращает значение старого значения переменной до того, как оно будет увеличено.

Если вы используете pre-increment ++i, то он увеличивает эту переменную и возвращает новое значение.

var i = 2; 
 

 
Number.prototype.valueOf = function() { 
 
    console.log("called"); //this logs twice 
 
    return ++i; 
 
}; 
 

 
var a = new Number(42); 
 

 
if (a == 2 && a == 3) { 
 
    console.log("Yep, this happened."); //this is logged 
 
}

+0

Я поражен количеством вопросов, которые я вижу на этом сайте про оператор инфиксных. Я не отслеживал, но кажется, что по крайней мере пара в день, если не больше. Я думаю, что сейчас у меня больше больше уважения к людям, которые научили меня программированию, потому что разница между ними мне очень хорошо объяснила. Я никогда не задумывался о том, какой оператор это и как он работает. С другой стороны, я думаю, что теперь у меня есть еще большая оценка неприятия Крокфорда инфикса. Если бы люди знали, как они работают, не будет проблем с их использованием, но, видимо, это вызывает путаницу. – vlaz

+0

@vlaz Это не инфикс, его префикс или постфикс. 'a + b' имеет инфиксный оператор. – Barmar

+0

@vlaz. Большая часть времени '++' используется только для побочного эффекта, а не для значения, как в цикле 'for (i = 0; i Barmar

1

a ++ постфикс, он возвращает значение, а затем увеличивает его.

Смежные вопросы