html - Sett inn Unicode-tegn i JavaScript
Jeg trenger å sette inn en Omega (Ω) på HTML-siden min. Jeg bruker dens HTML-escaped kode for å gjøre det, så jeg kan skrive Ω og få Ω. Det fungerer fint når jeg setter det inn i et HTML-element; men når jeg prøver å sette det inn i JS-en min, for eksempel var Omega=Ω, tolker den koden som JS og hele greia fungerer ikke. Er det noen som vet hvordan man kan gjøre dette?
Svar #1
Jeg antar at du faktisk vil at Omega skal være en streng som inneholder en stor omega? I så fall kan du skrive:
var Omega = '\u03A9';
(Fordi Ω er Unicode-tegnet med kodepunkt U+03A9; det vil si, 03A9 er 937, bare skrevet som fire heksadesimale sifre.)
Redigert for å legge til (i 2022): Det finnes nå en alternativ form som bedre støtter kodepunkter over U+FFFF:
let Omega = '\u{03A9}';
let desertIslandEmoji = '\u{1F3DD}';
Dømt ut fra https://caniuse.com/mdn-javascript_builtins_string_unicode_code_point_escapes, la de fleste eller alle nettlesere støtte for det i 2015, så det burde være rimelig trygt å bruke.
Svar #2
Selv om @ruakh ga et godt svar, vil jeg legge til noen alternativer for fullstendighet:
Du kan faktisk bruke til og med var Omega='Ω' i JavaScript, men bare hvis JavaScript-koden din er:
- inne i et hendelsesattributt, som i
onclick="var Omega='Ω'; alert(Omega)"eller - i et
script-element inne i et XHTML (eller XHTML + XML) dokument som serveres med en XML-innholdstype.
I disse tilfellene vil koden først (før den blir sendt til JavaScript-tolkeren) bli analysert av en HTML-tolk slik at tegnreferanser som Ω blir gjenkjent. Restriksjonene gjør dette til en upraktisk tilnærming i de fleste tilfeller.
Du kan også skrive inn Ω-tegnet på denne måten, som i var Omega='Ω', men da må tegnkodingen tillate det, kodingen må være korrekt deklarert, og du trenger programvare som lar deg legge inn slike tegn. Dette er en ren løsning og ganske gjennomførbar hvis du bruker UTF-8-koding for alt og er forberedt på å håndtere problemene som skapes av det. Kildekoden vil være lesbar, og når du leser den, ser du umiddelbart selve tegnet i stedet for kodebetegnelser. På den annen side kan det forårsake overraskelser hvis andre begynner å arbeide med koden din.
Ved å bruke \u-notasjonen, som i var Omega='\u03A9', fungerer uavhengig av tegnkoding, og det er i praksis nesten universelt. Det kan imidlertid kun brukes slik opp til U+FFFF, dvs. opp til \uffff, men de fleste tegn som de fleste noen gang har hørt om, faller innenfor dette området. (Hvis du trenger "høyere" tegn, må du bruke enten surrogatpar eller en av de to tilnærmingene ovenfor.)
Du kan også lage en karakter ved å bruke String.fromCharCode()-metoden, og sende inn Unicode-nummeret som en parameter, i desimal som i var Omega=String.fromCharCode(937) eller i heksadesimal som i var Omega=String.fromCharCode(0x3A9). Dette fungerer opptil U+FFFF. Denne tilnærmingen kan brukes selv når du har Unicode-nummeret i en variabel.
Svar #3
Et alternativ er å sette tegnet bokstavelig inn i skriptet ditt, f.eks.:
const omega = 'Ω';
Dette krever at du lar nettleseren vite den riktige kildekodingen, se Unicode i JavaScript
Men hvis du ikke kan eller ikke vil gjøre dette (for eksempel fordi tegnet er for eksotisk og ikke kan forventes å være tilgjengelig i kodeeditorens skrifttype), kan det tryggeste alternativet være å bruke ny stil for streng-escape eller String.fromCodePoint:
const omega = '\u{3a9}';
// or:
const omega = String.fromCodePoint(0x3a9);
Dette er ikke begrenset til UTF-16, men fungerer for alle unicode-kodepunkter. Til sammenligning har de andre tilnærmingene som er nevnt her følgende ulemper:
- HTML-escapes (
const omega='Ω';): fungerer bare når de vises uten escape i et HTML-element - gamle stil streng-escape (
const omega='\u03A9';): begrenset til UTF-16 String.fromCharCode: begrenset til UTF-16
