В чем разница между использованием этих разных способов сравнения двух символов?

#javascript #string #hex #ascii

#javascript #строка #hex #ascii

Вопрос:

В исходном коде здесь: https://github.com/pillarjs/parseurl/blob/master/index.js#L96

 if (typeof str !== 'string' || str.charCodeAt(0) !== 0x2f /* / */) {
    // ...
}
 

Автор использует str.charCodeAt( 0 ) !== 0x2f , чтобы проверить, начинается ли строка с косой черты (/), я хочу знать различия между различными способами ниже:

 str.charCodeAt( 0 ) === 0x2f;

str.charCodeAt( 0 ) === 47;

str.startsWith( '/' );
 

Спасибо.

Ответ №1:

В современной среде все они одинаковы.

Я полагаю, что кто-то может использовать 0x2f версию, если он хорошо знаком с шестнадцатеричными кодами символов ASCII (в большей степени, чем с десятичными знаками).

Одна из потенциальных проблем с startsWith версией заключается в том, что она требует String.prototype.startsWith , чего не существует в старых средах, таких как Internet Explorer. Использование charCodeAt будет немного совместимо со случайным пользователем.

IMO, более понятной альтернативой при сохранении обратной совместимости было бы:

 str.charAt(0) === '/'
 

или

 str[0] === '/'