JavaScript'te Dize Nesnesi

0 Hisse senetleri
0
0
0
0

giriiş

 

Dizeler, metin olarak temsil edilebilen verileri depolamak için kullanışlıdır. Dizeler üzerinde en sık kullanılan işlemlerden bazıları, uzunluklarını kontrol etmek, + ve += dize operatörlerini kullanarak dizeleri oluşturmak ve birleştirmek, indexOf() yöntemiyle alt dizelerin varlığını veya konumunu kontrol etmek veya substring() yöntemiyle alt dizeleri çıkarmaktır.

Dizeler oluşturma

Dizeler, ilkel olarak, dize sabitlerinden veya String() kurucusunu kullanarak nesneler olarak oluşturulabilir:

const string1 = "A string primitive";
const string2 = 'Also a string primitive';
const string3 = `Yet another string primitive`;
const string4 = new String("A String object");

Dize ilkel öğeleri ve dize nesneleri birçok ortak davranışı paylaşır, ancak başka önemli farklılıkları ve uyarıları da vardır. Aşağıdaki "Dize ilkel öğeleri ve Dize nesneleri" bölümüne bakın.

Dize sabitleri, aynı şekilde ele alınan tek veya çift tırnak işaretleri veya ters tırnak işareti ` kullanılarak belirtilebilir. Bu son biçim gerçek bir örüntüyü belirtir: Bu biçimle ifadeleri interpole edebilirsiniz. Dize sabit sözdizimi hakkında daha fazla bilgi için Sözcüksel sözdizimi bölümüne bakın.

Karakter erişimi

Bir dizgedeki bir karaktere erişmenin iki yolu vardır. İlki charAt() yöntemidir:

"cat".charAt(1); // gives value "a"

Başka bir yol da dizeyi, her bir karakterin sayısal bir indekse karşılık geldiği dizi benzeri bir nesne olarak düşünmektir:

"cat"[1]; // gives value "a"

Karaktere erişmek için parantez gösterimi kullanıldığında, bu özellikleri silme veya bir değer atama girişimleri başarısız olur. İlgili özellikler ne yazılabilir ne de ayarlanabilir. (Daha fazla bilgi için Object.defineProperty() bölümüne bakın.)

Dizelerin karşılaştırılması

Dizeleri karşılaştırmak için küçüktür ve büyüktür operatörlerini kullanın:

const a = "a";
const b = "b";
if (a < b) {
// true
console.log(`${a} is less than ${b}`);
} else if (a > b) {
console.log(`${a} is greater than ${b}`);
} else {
console.log(`${a} and ${b} are equal.`);
}

=== ve == dahil tüm karşılaştırma operatörlerinin, dizeleri "case" (durum) açısından karşılaştırdığını unutmayın. Dizelerin "case" (durum) açısından karşılaştırılmasının yaygın bir yolu, karşılaştırmadan önce her ikisini de aynı harfe (büyük veya küçük) dönüştürmektir.

function areEqualCaseInsensitive(str1, str2) {
return str1.toUpperCase() === str2.toUpperCase();
}

toUpperCase() veya toLowerCase() ile dönüştürme seçimi büyük ölçüde keyfidir ve Latin alfabesinin ötesine genişletildiğinde ikisi de tamamen güvenilir değildir. Örneğin, Almanca küçük harfler ß ve ss, toUpperCase() tarafından SS'ye dönüştürülürken, Türkçe ı harfi, toLocaleLowerCase ("tr") özellikle kullanılmadığı sürece toLowerCase() tarafından yanlışlıkla I'ye eşit olmadığı bildirilir.

const areEqualInUpperCase = (str1, str2) =>
str1.toUpperCase() === str2.toUpperCase();
const areEqualInLowerCase = (str1, str2) =>
str1.toLowerCase() === str2.toLowerCase();

areEqualInUpperCase("ß", "ss"); // true; should be false
areEqualInLowerCase("ı", "I"); // false; should be true

Büyük/küçük harfe duyarlı olmayan eşitliği test etmek için mantıklı ve sağlam bir çözüm, Intl.Collator API'sini veya string localeCompare() metodunu kullanmaktır (her ikisi de aynı arayüze sahiptir) ve duyarlılık seçeneğini "accent" veya "base" olarak ayarlamak.

const areEqual = (str1, str2, locale = "en-US") =>
str1.localeCompare(str2, locale, { sensitivity: "accent" }) === 0;

areEqual("ß", "ss", "de"); // false
areEqual("ı", "I", "tr"); // true

localeCompare() yöntemi, dizeleri strcmp()'ye benzer şekilde karşılaştırmaya olanak tanır; bu, dizeleri yerel ayarlara duyarlı bir şekilde sıralamaya olanak tanır.

İlkel dizeler ve dize nesneleri

JavaScript'in dize nesneleri ile ilkel dize değerleri arasında ayrım yaptığını unutmayın. (Bu aynı zamanda Boole değerleri ve Sayılar için de geçerlidir.)

Dize değişmezleri (çift veya tek tırnak işaretiyle ayrılmış) ve yapıcı olmayan bir bağlamda (yani, new anahtar sözcüğü kullanılmadan çağrılan) dize çağrılarından döndürülen dizeler, ilkel dizelerdir. İlkel bir dize üzerinde bir yöntemin çağrılması veya bir özellik aramasının gerçekleşmesi durumunda, JavaScript ilkel dizeyi otomatik olarak sarar ve yöntemi çağırır veya özellik aramasını sarmalayıcı nesne üzerinde gerçekleştirir.

const strPrim = "foo"; // A literal is a string primitive
const strPrim2 = String(1); // Coerced into the string primitive "1"
const strPrim3 = String(true); // Coerced into the string primitive "true"
const strObj = new String(strPrim); // String with new returns a string wrapper object.

console.log(typeof strPrim); // "string"
console.log(typeof strPrim2); // "string"
console.log(typeof strPrim3); // "string"
console.log(typeof strObj); // "object

İlkel dizeler ve dize nesneleri, eval() kullanıldığında da farklı sonuçlar verir. eval'a geçirilen ilkel, kaynak kodu olarak ele alınır. Bir nesne döndürüldüğünde, dize nesneleri diğer nesneler gibi ele alınır. Örneğin:

const s1 = "2 + 2"; // creates a string primitive
const s2 = new String("2 + 2"); // creates a String object
console.log(eval(s1)); // returns the number 4
console.log(eval(s2)); // returns the string "2 + 2"

Bu sebeplerden dolayı, kod ilkel bir dize beklerken dize nesneleriyle karşılaştığında bozulabilir, ancak genel olarak yazarların bu ayrım konusunda endişelenmesine gerek yoktur.

Bir String nesnesi her zaman valueOf() metoduyla orijinal karşılığına dönüştürülebilir.

console.log(eval(s2.valueOf())); // returns the number 4

Dize zorlaması

Dize bekleyen birçok yerleşik işlem, önce argümanlarını dizelere dönüştürür (bu nedenle String nesneleri ilkel dizeler gibi davranır). İşlemler aşağıdaki gibi özetlenebilir:

  • Dizeler olduğu gibi döndürülür.
  • Tanımsız, "tanımsız" olur.
  • null "boş" olur.
  • Doğru, “doğru” olur. Yanlış, “yanlış” olur.
  • Sayılar toString(10) ile aynı algoritma kullanılarak dönüştürülür.
  • BigInts, toString(10) ile aynı algoritma kullanılarak dönüştürülür.
  • Semboller TypeError hatasına neden olur.
  • Nesneler önce sırasıyla [Symbol.toPrimitive]() (ipucu olarak "string" kullanılarak), toString() ve valueOf() yöntemleri çağrılarak bir ilkele dönüştürülür. Elde edilen ilkel daha sonra bir dizeye dönüştürülür.

JavaScript'te hemen hemen aynı etkiyi elde etmenin farklı yolları vardır.

  • Kelimenin tam anlamıyla: `${x}` gömülü ifade için yukarıda açıklanan dize bağlama adımlarını tam olarak gerçekleştirir.
  • String() fonksiyonu: String(x), x'i dönüştürmek için aynı algoritmayı kullanır; ancak Symbols bir TypeError oluşturmaz, bunun yerine "Symbol(description)" döndürür; burada description, sembolün açıklamasıdır.
  • + operatörünü kullanarak: "" + x, işlenenini bir dize yerine ilkel bir değere zorlar ve bazı nesneler için normal dize zorlamasından tamamen farklı davranışlar sergiler. Daha fazla ayrıntı için referans sayfasına bakın.

Kullanım durumunuza bağlı olarak, yerleşik davranışı taklit etmek için `${x}` veya hatalara neden olmadan sembol değerlerini işlemek için String(x) kullanmak isteyebilirsiniz, ancak “” + x kullanmamalısınız. .

UTF-16 karakterleri, Unicode kod noktaları ve grafem kümeleri

Dizeler, esasen bir dizi UTF-16 kod birimi olarak temsil edilir. UTF-16 kodlamasında, her kod birimi tam olarak 16 bit uzunluğundadır. Bu, tek bir UTF-16 kod birimi olarak en fazla 216 veya 65.536 olası karakter olduğu anlamına gelir. Bu karakter kümesine Temel Çok Dilli Sayfa (BMP) adı verilir ve Latin, Yunan, Kiril ve birçok Doğu Asya karakteri gibi en yaygın karakterleri içerir. Her kod birimi, \u işareti ve ardından tam olarak dört onaltılık basamak içeren bir dize halinde yazılabilir.

Ancak, tüm Unicode karakter kümesi 65536'dan çok daha büyüktür. UTF-16'daki ek karakterler, tek bir karakteri temsil eden 16 bitlik kod birimi çiftleri olan vekil çiftler olarak saklanır. Belirsizliği önlemek için, çiftin iki parçası 0xD800 ile 0xDFFF arasında olmalıdır ve bu kod birimleri tek kodlu karakterleri kodlamak için kullanılmaz. (Daha kesin bir ifadeyle, üst vekil kod birimleri olarak da adlandırılan önde gelen vekiller, 0xD800 ile 0xDBFF arasında değerlere sahipken, alt vekil kod birimleri olarak da adlandırılan sondaki vekiller, Unicode karakteri de dahil olmak üzere 0xDC00 ile 0xDFFF arasında değerlere sahiptir.) Bir veya iki UTF-16 kod biriminden oluşan bir karaktere Unicode kod noktası da denir. Herhangi bir Unicode kod noktası, xxxxxx'in 1 ila 6 onaltılık basamağı temsil ettiği \u{xxxxxx} dizesine yazılabilir.

"Tek vekil", aşağıdaki tanımlardan birini karşılayan 16 bitlik bir kod birimidir:

  • 0xD800–0xDBFF aralığında (dahil) (yani önde gelen bir vekildir), ancak dizideki son kod birimidir veya bir sonraki kod birimi son vekil değildir.
  • 0xDC00–0xDFFF aralığında (yani son bir vekil), ancak dizideki ilk kod birimi veya önceki kod birimi orijinal vekil değildir.

Tekil vekiller herhangi bir Unicode karakterini temsil etmez. Çoğu dahili JavaScript yöntemi bunları doğru bir şekilde işlese de, hepsi UTF-16 kod birimlerinde çalıştığı için tekil vekiller genellikle diğer sistemlerle etkileşimde geçerli değerler değildir; örneğin, encodeURI() tekil vekiller için bir URIE hatası verir, çünkü URI kodlaması tekil vekiller için kodlaması olmayan UTF-8 kodlamasını kullanır. Tekil vekil içermeyen dizelere iyi biçimlendirilmiş dizeler denir ve UTF-16 ile ilgilenmeyen işlevlerle (encodeURI() veya TextEncoder gibi) güvenle kullanılabilirler. Bir dizenin iyi biçimlendirilmiş olup olmadığını isWellFormed() yöntemiyle kontrol edebilir veya tekil vekilleri toWellFormed() yöntemiyle temizleyebilirsiniz.

Unicode karakterlerinin üzerinde, görsel bir birim olarak kabul edilmesi gereken, grafiksel küme olarak bilinen belirli bir Unicode karakter dizisi bulunur. En yaygın örnek ifadelerdir: Çok çeşitli varyasyonları olan birçok ifade, aslında genellikle aynı karakterden oluşan birden fazla emojiden oluşur. (U+200D) birleş.

Hangi karakter düzeyinde yineleme yaptığınıza dikkat etmeniz gerekir. Örneğin, split(“”) komutu, UTF-16 kod birimlerine göre böler ve alternatif çiftleri ayırır. Dize dizinleri ayrıca her UTF-16 kod biriminin dizinine de başvurur. Öte yandan, [Symbol.iterator]() komutu, Unicode kod noktalarına göre yineleme yapar. Grafem kümeleri arasında yineleme yapmak özel kod gerektirir.

"😄".split(""); // ['\ud83d', '\ude04']; splits into two lone surrogates
// "Backhand Index Pointing Right: Dark Skin Tone"
[..."👉🏿"]; // ['👉', '🏿']
// splits into the basic "Backhand Index Pointing Right" emoji and
// the "Dark skin tone" emoji
// "Family: Man, Boy"
[..."👨‍👦"]; // [ '👨', '‍', '👦' ]
// splits into the "Man" and "Boy" emoji, joined by a ZWJ
// The United Nations flag
[..."🇺🇳"]; // [ '🇺', '🇳' ]
// splits into two "region indicator" letters "U" and "N".
// All flag emojis are formed by joining two region indicator letters

Yapıcı

Sicim()

Dize nesneleri oluşturur. Fonksiyon olarak çağrıldığında String türünde başlangıç değerleri döndürür.

Statik yöntemler

Dize.fromCharCode()

Belirtilen Unicode değerleri dizisi kullanılarak oluşturulmuş bir dize döndürür.

Dize.fromCodePoint()

Belirtilen kod noktası dizisi kullanılarak oluşturulan bir dize döndürür.

Dize.raw()

Ham desen dizesinden oluşturulan bir dizeyi döndürür.

Örnek özellikler

Bu özellikler String.prototype'ta tanımlanmıştır ve tüm String örnekleri tarafından paylaşılır.

Dize.prototip.oluşturucu

Örnek nesneyi oluşturan oluşturucu işlevi. Dize örnekleri için başlangıç değeri dize oluşturucusudur.

Bu özellikler her dize örneğine özgüdür.

uzunluk

Dizenin uzunluğunu yansıtır. Salt okunur.

Örnek yöntemler

Dize.prototip.at()

Belirtilen dizindeki karakteri (tam olarak bir UTF-16 kod birimi) döndürür. Dizenin son karakterinden geriye doğru sayarak negatif tam sayıları kabul eder.

Dize.prototip.charAt()

Belirtilen dizindeki karakteri (tam olarak bir UTF-16 kod birimi) döndürür.

Dize.prototip.charCodeAt()

Belirtilen dizindeki UTF-16 kod biriminin değerini döndüren bir sayı döndürür.

Dize.prototip.kodNoktası()

Belirtilen konumdan başlayarak UTF-16 kodlu kod noktasının kod noktası değeri olan negatif olmayan bir tam sayı döndürür.

Dize.prototip.concat()

Metin iki (veya daha fazla) dizeyi birleştirir ve yeni bir dize döndürür.

Dize.prototip.biter()

Bir dizenin searchString dizesinin karakterleriyle bitip bitmediğini belirler.

Dize.prototip.includes()

Çağrı dizesinin bir SearchString içerip içermediğini belirler.

Dize.prototip.indexOf()

Bu dizgede searchValue'nun ilk oluşumunun indeksini veya bulunamazsa -1 değerini döndürür.

Dize.prototip.iyiBiçimlendirilmiş()

Bu dizenin tekil değiştirmelere sahip olup olmadığını belirten bir boole değeri döndürür.

Dize.prototip.sonIndexOf()

Bu dizgede searchValue'nun son oluşumunun indeksini veya bulunamazsa -1 değerini döndürür.

Dize.prototype.localeCompare()

compareString tarafından başvurulan dizenin sıralama düzeninde verilen dizeden önce, sonra veya ona eşdeğer olup olmadığını gösteren bir sayı döndürür.

Dize.prototip.eşleştirme()

Bir düzenli ifade olan regexp'i bir dizeyle eşleştirmek için kullanılır.

Dize.prototip.matchAll()

Tüm regexp eşleşmelerinin bir yineleyicisini döndürür.

Dize.prototip.normalize()

Unicode normalleştirilmiş formu, çağıran dizenin değerini döndürür.

Dize.prototip.padEnd()

Geçerli dizeyi sonundan bir dizeyle birleştirir ve hedefUzunluk uzunluğunda yeni bir dize döndürür.

Dize.prototip.padStart()

Geçerli dizeyi başlangıçtan itibaren verilen bir dizeyle doldurur ve hedefUzunluk uzunluğunda yeni bir dize döndürür.

Dize.prototip.tekrar()

Nesnenin elemanlarını sayarak içeren bir dize döndürür.

Dize.prototip.değiştir()

SearchFor, replaceWith kullanılarak öğeleri değiştirmek için kullanılır. searchFor bir dize veya düzenli ifade olabilir ve replaceWith bir dize veya fonksiyon olabilir.

Dize.prototip.replaceAll()

SearchFor, replaceWith'in tüm oluşumlarını değiştirmek için kullanılır. searchFor bir dize veya düzenli ifade olabilir ve replaceWith bir dize veya fonksiyon olabilir.

Düzenli ifade regexp ile çağıran dize arasında bir eşleşme arayın.

Dize.prototip.dilim()

Bir dizenin bir kısmını çıkarır ve yeni bir dize döndürür.

Dize.prototip.split()

Sep dizesinin alt dizelerine çağrı dizesini bölerek doldurulan dizelerden oluşan bir dizi döndürür.

Dize.prototip.başlangıçlar()

Çağrı dizesinin searchString dizesindeki karakterlerle başlayıp başlamadığını belirler.

String.prototype.substr() kullanımdan kaldırıldı

Belirtilen indeksten başlayıp belirtilen karakter sayısına kadar uzanan bir dizenin bir kısmını döndürür.

Dize.prototip.altdize()

Belirtilen indeksten (veya indeksler arasından) çağrı dizesinin karakterlerini içeren yeni bir dize döndürür.

Dize.prototip.toLocaleLowerCase()

Bir dizenin içindeki karakterler, geçerli yerel ayarlara saygı gösterilerek küçük harfe dönüştürülür.

Çoğu dil için bu, toLowerCase() ile aynı durumu döndürür.

Dize.prototip.toLocaleUpperCase()

Bir dizenin içindeki karakterler, geçerli yerel ayarlara uyularak büyük harfe dönüştürülür.

Çoğu dil için bu, toUpperCase() ile aynı durumu döndürür.

Dize.prototip.toLowerCase()

Çağrılan dizenin değerini küçük harfe dönüştürülmüş olarak döndürür.

Dize.prototip.toString()

Belirtilen nesneyi temsil eden bir dize döndürür. Object.prototype.toString() metodunu geçersiz kılar.

Dize.prototip.toUpperCase()

Çağıran dizenin değerini büyük harfe dönüştürülmüş olarak döndürür.

Dize.prototip.toWellFormed()

Bu dizenin tüm tekil örneklerinin Unicode değiştirme karakteri U+FFFD ile değiştirildiği bir dize döndürür.

Dize.prototip.trim()

Dizenin başındaki ve sonundaki boşlukları keser.

Dize.prototip.trimEnd()

Dizenin sonunu boşlukla keser.

Dize.prototip.trimStart()

Dizenin başlangıcındaki boşlukları keser.

Dize.prototip.değeri()

Belirtilen nesnenin başlangıç değerini döndürür. Object.prototype.valueOf() metodunu geçersiz kılar.

Dize.prototip[Sembol.yineleyici]()

Bir dize değerinin kod noktaları üzerinde yineleme yapan ve her kod noktasını bir dize değeri olarak döndüren yeni bir yineleyici nesnesi döndürür.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Ayrıca Şunları da Beğenebilirsiniz