Конструкции потока управления в JavaScript: специфичные для браузера или встроенные в JS

Я собрал небольшую функцию rangeв JS. Я тестировал ее в Chrome 19, FF и IE (7-9) и это работает хорошо Вопрос, который у меня есть, связан с оператором while.

function range(from,to,step)
{
    'use strict';
    var sCode,eCode,result;
    result = [];
    step = (!step || isNaN(step) || step === 0 ? 1 : step);
    sCode = (''+from).charCodeAt(0);
    eCode = (''+to).charCodeAt(0);
    step *= (sCode > eCode && step > 0 ? -1 : 1);
    do
    {
        if (String.fromCharCode(sCode))
        {
            result.push(String.fromCharCode(sCode));
        }
    }while((step > 0 && eCode >= (sCode+=step)) || (step < 0 && eCode <= (sCode+=step)));
    return result;
}

Я помню, как читал здесь вопрос некоторое время назад о том, как JS обрабатывает конструкции потока управления и логические операторы. Я думаю, что в нем что-то есть что нужно сделать с проверкой того, есть ли у объекта определенный метод, и если да, то с использованием его возвращаемого значения ( if (event.returnValue && e.returnValue === true)вроде того).
I похоже, я больше не могу найти этот вопрос, вот что я хотел знать:

while((step > 0 && eCode >= (sCode+=step)) || (step < 0 && eCode <= (sCode+=step)));

Поскольку функция ведет себя так, как я хочу, я думаю, что прав, говоря, что если шаг < 0является ложным, && eCode >= (sCode+=step)будет игнорироваться, оставляя значение sCodeбез изменений.
Если проверка stepвыполнена true, sCodeбудет увеличиваться/уменьшаться. Я заключил это назначение в скобки, чтобы убедиться, что при новом назначенном значении sCodeбудет сравниваться с eCode. Опять же, я предполагаю, что скобки будут давать приоритет присваиванию над логическим оператором.

Верно ли это для ВСЕХбраузеров или это зависит от конкретного браузера? есть ли шанс, что эта функция дважды увеличит (или уменьшит) значение sCodeв некоторых браузерах?
В данном случае это не так важно (это легко исправить, чтобы не возникало проблем). Но я хочу знать, присуще ли это поведение самому JavaScript или реализации браузера.


Спасибо, что дочитали до конца. Если вы не возражаете
Еще пара моментов (неважно, просто интересно):

  • каков максимальный charCode в JavaScript? Беглый поиск в Google ничего мне не сказал, а тестирование в консоли JS заставило меня поверить, что это 5999999999989759, что кажется почти невероятным, но опять же, мне, возможно, придется освежить свой китайский.
  • Когда fromне определено, подход (одобренный jslint) from.toString().charCodeAt(0);терпит неудачу, потому что, очевидно, undefinedимел нет метода toString, почему же (''+from).charCodeAt(0);возвращает Uвсе равно? Я думал, что он неявно вызывает метод toString?
5
задан Elias Van Ootegem 22 June 2012 в 21:29
поделиться