это прорывается к этому в простой логике, что то же самое происходит в вашем сознании, когда вы его кодируете. Обратите внимание, что эта функция не улавливает неопределенные значения, нулевые значения нано, строки, поплавки, логические значения, байты или что-то другое, что может быть вызвано нормальным потоком.
Это то, во что я верю, является намерением линии в упрощенной логике. Это то, что происходит в моем сознании, когда я кодирую такие строки.
function calculatewhat(i) {
if(i != 0) {/*i = i;*/ // i gets assigned and then evaluated.
//If its anything but zero it's true, if its zero its false.
if(i < 0) { // Test if its smaller than zero
return Math.max(0, len + i) ;
}
else { // its bigger than 0
return i
}
else { // if its 0... but you could just as wel return i
// instead of creating a new variable for the return since i is zero.
return 0;
}
}
Я бы закодирован его вместо вложенного следующего
i = i < 0 ? Math.max(0, len + i) : i
И чтобы удовлетворить Cerbrus это, как это действительно работает.
function calculatewhat(i) {
if(i) { //check if its a true value. This will evaluate true also on "1", "blah",true, etc...
//To be typesafe you should make it an integer test. if(typeof i === 'number' && i !== 0);
if(i < 0) { // Test if its smaller than zero This will also return true on "-20" and -20.555
return Math.max(0, len + i) ;
}
else { // its bigger than 0 return i. but its type can be anything but an integer, so beware.
return i
}
else { //it's not a number or its 0.
//We can't be sure about type so lets return 0 to i making it a valid integer.
return 0;
}
}
Самое смешное, оно может быть еще короче: 'i = i <0? Math.max (0, len + i): i || 0; ' –