--- title: String slug: Web/JavaScript/Reference/Global_Objects/String tags: - húzáskérvény translation_of: Web/JavaScript/Reference/Global_Objects/String ---
A String konstruktorral létrehozhatunk karakterláncokat (szövegek szinte mindenhol jelenlévő reprezentációja)
A sztringliterálok a következő formájúak:
'sztring szöveg' "sztring szöveg" "中文 español Deutsch English देवनागरी العربية português বাংলা русский 日本語 norsk bokmål ਪੰਜਾਬੀ 한국어 தமிழ் עברית"
Sztringeket létrehozhatunk a String globális objektummal közvetlenül:
String(valami)
valamiAz ECMAScript 2015-tel kezdődően, a sztringliterálok ún. Template literal-ok is lehetnek:
`hello világ`
`hello!
world!`
`hello ${who}`
tag `<a>${who}</a>`
Itt a ${who} helyére a megfelelő érték fog behelyettsítődni.
Egyes karakterek összezavarhatnák a JavaScript értelmezőt. Például egy " karakterről hogyan tufná megállapítani, hogy a karakterlánc végét jelöli, vagy annak része? Erre találták ki az escape jelölést, aminek segítségével jelölhetjük, hogy egy karakternek nincs speciális szerepe, nem kell programkódként értelmezni. Lényegében az történik, hogy a feldolgozott karakterláncban az escape karakter (például a \") helyére az annak megfelelő kimenet (") kerül.
| Kód | Kimenet |
|---|---|
\XXX |
oktális Latin-1 karakter. |
\' |
egyszeres idézőjel |
\" |
idézőjel |
\\ |
backslash |
\n |
új sor (soremelés) |
\r |
kocsi-vissza |
\v |
függőleges tabulátor |
\t |
tabulátor |
\b |
backspace |
\f |
lapdobás |
\uXXXX |
unicode kódpont |
\u{X} ... \u{XXXXXX} |
unicode kódpont {{experimental_inline}} |
\xXX |
hexadecimális Latin-1 karakter |
Más nyelvekkel ellentétben a JavaScript nem különbözteti meg az egyszeres, illetve a kettős idézőjelekkel hivatkozott sztringeket; ezért a fenti escape szekvenciák mind az egyszeres, mind a kettős idézőjelekkel létrehozott sztringek esetén működnek.
Időnként a kódban szerepelhetnek nagyon hosszú sztringek. Vég nélkül folytatódó, illetve a szerkesztőprogram kénye-kedve szerint megtört sorok helyett lehetséges a sztringek több sorba tördelése a tartalom meghagyásával. Erre két mód van.
Használhatjuk a + operátort több füzér összefűzéséhez, így:
let longString = "Ez egy elég hosszú String ahhoz " +
"hogy több sorba rendezzem, mert " +
"máskülönben a kód nem olvasható.";
Vagy használható a backslash karakter ("\") az összes sor végén, jelölve, hogy a sztring a következő sorban folytatódik. Győződjünk meg róla, hogy nincs szóköz vagy más karakter a backslash után (soremelés kivételével), akár bekezdésként, különben nem fog működni. Ennek formája a kövekező:
let longString = "This is a very long string which needs \ to wrap across multiple lines because \ otherwise my code is unreadable.";
Mindkét forma a példában azonos sztringek létrehozását eredményezi.
A stringek szöveges formában ábrázolt adatok tárolására használhatók. A leggyakoribb sztringműveletek közé tartozik a {{jsxref("String.length", "hossz")}} vizsgálata, azok felépítése és összefűzése a + és += sztring operátorokkal, alfüzérek meglétének és helyének vizsgálata a {{jsxref("String.prototype.indexOf()", "indexOf()")}} metódussal, illetve alfüzérek lekérdezése a {{jsxref("String.prototype.substring()", "substring()")}} metódussal.
Kétféle mód van egy sztringben az egyes karakterekhez vakó hozzáféréshez. Az egyik a {{jsxref("String.prototype.charAt()", "charAt()")}} metódus:
return 'macska'.charAt(1); // "a"-val tér vissza
A másik mód (bevezetve az ECMAScript 5-ben) tömbszerű objektumként kezeli a sztringet, ahol az egyes karaktereknem számindexek felelnek meg:
return 'macska'[1]; // "a"-val tér vissza
Törölni vagy megváltoztatni e tulajdonságokat karakter hozzáféréssel nem lehet a szögletes zárójeles jelölés esetén. A szóban forgó tulajdonságok nem írhatók és nem is konfigurálhatók. (Lásd a {{jsxref("Object.defineProperty()")}} cikket további információért.)
C fejlesztőknek ismerős lehet a strcmp() függvény sztringek összehasonlításához. A JavaScript-ben a kisebb és nagyobb operátorok használhatók:
var a = 'a';
var b = 'b';
if (a < b) { // true
console.log(a + ' kisebb, mint ' + b);
} else if (a > b) {
console.log(a + ' nagyobb, mint ' + b);
} else {
console.log(a + ' és ' + b + ' egyenlők.');
}
Hasonlót eredményez a {{jsxref("String.prototype.localeCompare()", "localeCompare()")}} metódus, amelyet a String példányok örökölnek.
String objektumok megkülönböztetéseJegyezzük meg, hogy a JavaScript különbséget tesz String objektumok és primitív sztring értékek között. (Ugyanez igaz {{jsxref("Boolean")}} és {{jsxref("Global_Objects/Number", "Number")}} objektumokra.)
Sztringliterálok (egyszeri vagy kettős idézőjellel jelölve) és a String hívásából visszatérő, nem konstruktor kontextusból (azaz, nem a {{jsxref("Operators/new", "new")}} kulcsszó használatával) kapott sztringek primitív sztringek. A JavaScript automatikusan String objektumokká alakítja a primitíveket, hogy eképpen a String objektum metódusai primitív sztringeken is használhatók legyenek. Amikor primitív sztringen hívódik metódus vagy tulajdonság lekérdezés, a JavaScript automatikusan String objektummá alakítja a sztringet és így hívja meg a metódust, illetve a lekérdezést.
var s_prim = 'foo'; var s_obj = new String(s_prim); console.log(typeof s_prim); // Konzol kimenet: "string" console.log(typeof s_obj); // Konzol kimenet: "object"
Sztring primitívek és String objektumok az {{jsxref("Global_Objects/eval", "eval()")}} használatakor is különböző eredményt adnak. Az eval számára átadott primitívek forráskódként vannak kezelve, míg a String objektumok, mint bármely más átadott objektum esetén, az objektum visszaadását eredményezik. Például:
var s1 = '2 + 2'; // létrehoz egy sztring primitívet
var s2 = new String('2 + 2'); // létrehoz egy String objektumot
console.log(eval(s1)); // a 4 számmal tér vissza
console.log(eval(s2)); // a "2 + 2" sztringgel tér vissza
Ezen okok miatt a kód hibás működését okozhatja, amikor String a kód String objektumot kap, miközben primitív sztringet vár, bár általában nem szükséges a fejlesztőknek ezzel törődni.
Egy String objektum mindig átalakítható a primitív megfelelőjére a {{jsxref("String.prototype.valueOf()", "valueOf()")}} metódussal.
console.log(eval(s2.valueOf())); // 4-et ad vissza
StringView — a C-like representation of strings based on typed arrays cikket.String objektumhoz.String generikus metódusokA String generikusok nem szabványosak, elavultak és a közeljövőben törlésre kerülnek.
A String példánymetódusok a JavaScript 1.6 óta elérhetők Firefox-ban (nem része az ECMAScript szabványnak) a String objektumon bármely objektumon String metódusok alkalmazására:
var num = 15; console.log(String.replace(num, "5", "2"));
A String generikusokról való áttéréshez lásd a Warning: String.x is deprecated; use String.prototype.x instead cikket.
Tömbök generikusai ({{jsxref("Global_Objects/Array", "Generics", "#Array_generic_methods", 1)}}) a tömb ({{jsxref("Array")}}) metódusokra is elérhetők.
String példányokA String használható egy biztonságosabb {{jsxref("String.prototype.toString()", "toString()")}} alternatívaként, mivel {{jsxref("null")}}, {{jsxref("undefined")}}, és {{jsxref("Symbol", "symbol")}} objektumokra is használható. Például:
var outputStrings = [];
for (var i = 0, n = inputValues.length; i < n; ++i) {
outputStrings.push(String(inputValues[i]));
}
| Specificáció | Státusz | Megjegyzés |
|---|---|---|
| {{SpecName('ESDraft', '#sec-string-objects', 'String')}} | {{Spec2('ESDraft')}} | |
| {{SpecName('ES2015', '#sec-string-objects', 'String')}} | {{Spec2('ES2015')}} | |
| {{SpecName('ES5.1', '#sec-15.5', 'String')}} | {{Spec2('ES5.1')}} | |
| {{SpecName('ES1')}} | {{Spec2('ES1')}} | Kezdeti definíció. |
{{Compat("javascript.builtins.String",2)}}
StringView — a C-like representation of strings based on typed arrays