


![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


"\n".charCodeAt(0);
Противоположность этому - String.fromCharCode(10).
Интересный факт: вам действительно не нужен 0 (значение первого аргумента) - подойдет только "\n".charCodeAt().
@MathiasBynens: и, к счастью, это задокументировано: developer.mozilla.org/en/JavaScript/Reference/Global_Objects /…. "если это не число, по умолчанию 0"
Следует отметить, что в отличие от String.fromCharCode( asciiNumVal ), stringInstance.charCodeAt( index ) является нет статическим методом класса String.
@Mathias Bynens, Он, конечно, по умолчанию равен нулю, но я просто провел тест производительности просто из интереса, и он работает ** относительно плохо по сравнению с использованием 0. jsperf.com/default-to-0-vs-0/4 ** Это только относительное различие, в любом случае оно очень быстрое.
@wademontague Я бы никогда не подумал проверить это. Это так смешно! Спасибо за результат.
Я думаю, что немного яснее (с точки зрения удобочитаемости) указать индекс вместо того, чтобы оставлять его по умолчанию ... но в любом случае это второстепенно
@MathiasBynens charCodeAt() без аргументов не имеет смысла
@developerbmw Попробуйте "ABC".charCodeAt(0) // return 65 - это просто массив позиций A ..., другая позиция B - "ABC".charCodeAt(1) // return 66, я согласен, что @Mathias верен.
По-видимому, пропуск 0 медленнее, если кому-то интересно. См. Комментарий Ройхови к ответу Марко Альтиери ниже.
пожалуйста, не просто объясняйте решение, почему оно сработает, с поддерживающим ответом
включая 0 теперь медленнее в Chrome 75 на 2% для всех, кого это интересует ... интересно, что .charCodeAt (1) был самым производительным (0,03% быстрее, чем без аргументов)
«\ п» .charCodeAt (); // 0 можно игнорировать
charCodeAt() без аргументов выдает ошибку в TypeScript.
String.prototype.charCodeAt() может преобразовывать строковые символы в числа ASCII. Например:
"ABC".charCodeAt(0) // returns 65
В противном случае используйте String.fromCharCode(10), который преобразует числа в одинаковые символы ASCII. Эта функция может принимать несколько чисел и объединять все символы, а затем возвращать строку. Пример:
String.fromCharCode(65,66,67); // returns 'ABC'
Вот краткая справка по символам ASCII:
{
"31": "", "32": " ", "33": "!", "34": "\"", "35": "#",
"36": "$", "37": "%", "38": "&", "39": "'", "40": "(",
"41": ")", "42": "*", "43": "+", "44": ",", "45": "-",
"46": ".", "47": "/", "48": "0", "49": "1", "50": "2",
"51": "3", "52": "4", "53": "5", "54": "6", "55": "7",
"56": "8", "57": "9", "58": ":", "59": ";", "60": "<",
"61": " = ", "62": ">", "63": "?", "64": "@", "65": "A",
"66": "B", "67": "C", "68": "D", "69": "E", "70": "F",
"71": "G", "72": "H", "73": "I", "74": "J", "75": "K",
"76": "L", "77": "M", "78": "N", "79": "O", "80": "P",
"81": "Q", "82": "R", "83": "S", "84": "T", "85": "U",
"86": "V", "87": "W", "88": "X", "89": "Y", "90": "Z",
"91": "[", "92": "\", "93": "]", "94": "^", "95": "_",
"96": "`", "97": "a", "98": "b", "99": "c", "100": "d",
"101": "e", "102": "f", "103": "g", "104": "h", "105": "i",
"106": "j", "107": "k", "108": "l", "109": "m", "110": "n",
"111": "o", "112": "p", "113": "q", "114": "r", "115": "s",
"116": "t", "117": "u", "118": "v", "119": "w", "120": "x",
"121": "y", "122": "z", "123": "{", "124": "|", "125": "}",
"126": "~", "127": ""
}
Лучшая ссылка на ascii: en.wikipedia.org/wiki/ASCII - я очень горжусь тем, что раскраска, которую я сделал для таблиц на этой странице, остается там спустя почти 10 лет :)
@theGrayFox C:\> man ascii дает Bad command or file name
Обратите внимание, что эти методы совместимы с UTF-16, то есть в зависимости от входной строки charCodeAt может выходить далеко за пределы 1 байтовых значений ASCII 0–127. Не предполагайте, что это находится в этом диапазоне, если произвольный ввод строки принимается и обрабатывается javascript.
Если у вас только один символ, а не строка, вы можете использовать:
'\n'.charCodeAt();
опуская 0 ...
Раньше он был значительно медленнее, чем 'n'.charCodeAt(0), но я протестировал его сейчас и больше не вижу разницы (выполнено 10 миллиардов раз с 0 и без него). Проверено на работоспособность только в Chrome и Firefox.
На самом деле это занимает больше времени. Лучше просто использовать ноль. (На моем компьютере это заняло примерно вдвое больше времени - 0,055 с против 0,126 с через несколько десятков тысяч итераций)
Хотя другие ответы верны, я предпочитаю такой способ:
function ascii (a) { return a.charCodeAt(0); }
Затем, чтобы использовать его, просто:
var lineBreak = ascii("\n");
Я использую это для небольшой системы быстрого доступа:
$(window).keypress(function(event) {
if (event.ctrlKey && event.which == ascii("s")) {
savecontent();
}
// ...
});
И вы даже можете использовать его внутри map () или других методов:
var ints = 'ergtrer'.split('').map(ascii);
Просто для красоты новый способ написания ES6: const ascii = a => a.charCodeAt(0);
Для тех, кто хочет получить сумму всех кодов ASCII для строки:
'Foobar'
.split('')
.map(x=>x.charCodeAt(0))
.reduce((a,b)=>a+b);
Или ES6:
[...'Foobar']
.map(char => char.charCodeAt(0))
.reduce((current, previous) => previous + current)
Еще раз проверьте свою последнюю строку.
Элегантно! как функция: function ascii (str) {return str .split ('') .map (function (char) {return char + ":" + String (char.charCodeAt (0)) + "\ n";}) .reduce (функция (текущая, предыдущая) {вернуть текущую + предыдущую;}); }
[...'Foobar'].reduce((i,s)=>s.charCodeAt(0)+i,0)
Никто не запрашивал сумму всех кодов ASCII в строке и вряд ли когда-либо сделает это.
Для поддержки всех UTF-16 (также не-BMP / дополнительные символы) из ES6 доступен метод строка.codePointAt ();
Этот метод представляет собой улучшенную версию charCodeAt, которая может поддерживать только кодовые точки Unicode <65536 (216 - один 16-битный).
Стоит отметить, что String.prototype.codePointAt() - это не поддерживается версиями Internet Explorer любой. (Однако он поддерживается в Edge.) Вы можете получить полифилл здесь.
JavaScript хранит строки как UTF-16 (двухбайтные), поэтому, если вы хотите игнорировать второй байт, просто удалите его с помощью побитового оператора & на 0000000011111111 (т.е. 255):
'a'.charCodeAt(0) & 255 === 97; // because 'a' = 97 0
'b'.charCodeAt(0) & 255 === 98; // because 'b' = 98 0
'✓'.charCodeAt(0) & 255 === 19; // because '✓' = 19 39
зачем вам игнорировать второй байт?
Вопрос касается создания ASCII из строки UTF-16 (двухбайтовой). Рано или поздно вы получите коды, отличные от ascii, если не проигнорируете второй байт.
@ Стивен де Салас - Ваше «решение» для получения не-ASCII-кодов для не-ASCII-символов - вернуть ASCII-код неправильный ??
@CarlSmith, не тот. Просто чтобы убрать компонент символа, отличный от ascii. Если вы работаете с одиночными байтами, это полезно. Однако вашему проекту может потребоваться другое решение.
Вы можете ввести символ и получить код Ascii, используя этот код
Например, введите такой символ, как A Вы получаете код ASCII 65
function myFunction(){
var str=document.getElementById("id1");
if (str.value= = "") {
str.focus();
return;
}
var a = "ASCII Code is == > ";
document.getElementById("demo").innerHTML =a+str.value.charCodeAt(0);
}<p>Check ASCII code</p>
<p>
Enter any character:
<input type = "text" id = "id1" name = "text1" maxLength = "1"> </br>
</p>
<button onclick = "myFunction()">Get ASCII code</button>
<p id = "demo" style = "color:red;"></p>Чтобы обеспечить полную поддержку Unicode и обратимость, рассмотрите возможность использования:
'\n'.codePointAt(0);
Это гарантирует, что при тестировании символов, превышающих предел UTF-16, вы получите их истинное значение кодовой точки.
например
'?'.codePointAt(0); // 68181
String.fromCodePoint(68181); // '?'
'?'.charCodeAt(0); // 55298
String.fromCharCode(55298); // '�'
Также может быть полезно преобразовать специальный символ в шестнадцатеричную нотацию, поскольку некоторые текстовые редакторы могут работать неправильно, имея дело непосредственно с такими символами. Например: предупреждение (str.hexEncode (). HexDecode ());
str.charCodeAt(index)
Использование charCodeAt()
В следующем примере возвращается 65, значение Unicode для A.
'ABC'.charCodeAt(0)// возвращает 65
Чтобы преобразовать строку в кумулятивное число:
const stringToSum = str => [...str||"A"].reduce((a, x) => a += x.codePointAt(0), 0);
console.info(stringToSum("A")); // 65
console.info(stringToSum("Roko")); // 411
console.info(stringToSum("Stack Overflow")); // 1386Допустим, вы хотите создать разные цвета фона в зависимости от имени пользователя:
const stringToSum = str => [...str||"A"].reduce((a, x) => a += x.codePointAt(0), 0);
const UI_userIcon = user => {
const hue = (stringToSum(user.name) - 65) % 360; // "A" = hue: 0
console.info(`Hue: ${hue}`);
return `<div class = "UserIcon" style = "background:hsl(${hue}, 80%, 60%)" title = "${user.name}">
<span class = "UserIcon-letter">${user.name[0].toUpperCase()}</span>
</div>`;
};
[
{name:"A"},
{name:"Amanda"},
{name:"amanda"},
{name:"Anna"},
].forEach(user => {
document.body.insertAdjacentHTML("beforeend", UI_userIcon(user));
});.UserIcon {
width: 4em;
height: 4em;
border-radius: 4em;
display: inline-flex;
justify-content: center;
align-items: center;
}
.UserIcon-letter {
font: 700 2em/0 sans-serif;
color: #fff;
}Почему цифра «65»? Что это означает?
-65 не является обязательным. Поскольку ASCII "A" числовой символ = 65. - 65 является необязательным, служит для получения первого символа ("A") как int 0.
Обратите внимание, что метод String.prototype.charCodeAt (), предлагаемый в большинстве ответов, вернет Кодовый блок UTF-16 (даже не полную правильную кодировку UTF-16 по историческим причинам). Только первые 128 кодовых точек Unicode являются прямым соответствием кодировки символов ASCII.