Javascript değişken türü. "Basit hakkında zor." JS veri türleri. İlkel ve nesnelerin gerçeğini araştırmak. Geliştirilmiş tip kontrolü

Son güncelleme: 03/26/2018

Javascript'te kullanılan tüm veriler belirli bir tiptedir. JavaScript'in beş temel veri türü vardır:

    String: bir dizeyi temsil eder

    Sayı: sayısal bir değeri temsil eder

    Boolean: doğru veya yanlış bir boolean değerini temsil eder

    undefined: değerin ayarlanmadığını gösterir

    null: tanımlanmamış bir değeri gösterir

Yukarıdaki beş türün altına girmeyen tüm veriler tip nesnesidir

Sayısal veriler

JavaScript'teki sayılar iki şekilde olabilir:

    Tamsayılar, örneğin, 35. Hem pozitif hem de negatif sayılar kullanabiliriz. Kullanılan sayı aralığı: -2 53 ila 2 53

    Kesirli sayılar (kayan nokta sayıları), örneğin, 3.5575. Yine, hem pozitif hem de negatif sayıları kullanabilirsiniz. Kayan noktalı sayılar için aynı aralık kullanılır: -2 53 ila 2 53

Örneğin:

Var x \u003d 45; var y \u003d 23.897;

Diğer programlama dillerinde olduğu gibi tamsayı ve kesirli parçalar arasında bir ayırıcı olarak bir nokta kullanılır.

hatlar

Dize türü, dizeleri, yani tırnak işaretleri içine alınmış verileri temsil eder. Örneğin, "Merhaba dünya". Ayrıca, hem çift hem de tek tırnak kullanabilirsiniz: "Merhaba dünya" ve "Merhaba dünya". Tek sınırlama: Kapanış tırnak işaretinin türü, açılış tırnak işaretinin türüyle aynı olmalıdır, yani hem çift hem de tek.

Dizenin içinde tırnaklar varsa, eğik çizgi ile kaçmalıyız. Örneğin, "Büro" Boynuzları ve Toynakları "metnini alalım. Şimdi tırnak kaçış:

Var companyName \u003d "Büro \\" Kornalar ve Toynaklar \\ "";

Lavaboların içinde başka bir tür tırnak işareti de kullanabiliriz:

Var companyName1 \u003d "Büro" Kornalar ve Toynaklar ""; var companyName2 \u003d "Büro" Kornalar ve Toynaklar "";

Tip boolean

Boolean türü, true ve false olan boolean veya mantıksal değerleri temsil eder (yani, evet veya hayır):

Var isAlive \u003d true; var isDead \u003d yanlış;

null ve undefined

Genellikle null ve undefined arasında karışıklık vardır. Dolayısıyla, bir değişkeni yalnızca başlangıç \u200b\u200bdeğeri atamadan tanımladığımızda, tanımsız bir türü temsil eder:

Var isAlive; console.log (isAlive); // tanımsız çıktı verecek

Null değeri atamak, değişkenin tanımsız bir değere sahip olduğu anlamına gelir (bir sayı değil, bir dize değil, bir boole değeri değil), ancak yine de bir değere sahiptir (tanımsız, değişkenin önemli olmadığı anlamına gelir):

Var isAlive; console.log (isAlive); // undefined isAlive \u003d null; console.log (isAlive); // null isAlive \u003d tanımsız; // türü tekrar undefined console.log (isAlive) olarak ayarlayın; // tanımsız

nesne

Yazım nesnesi karmaşık bir nesneyi temsil eder. Bir nesnenin en basit tanımı parantez ile temsil edilir:

Var kullanıcı \u003d ();

Bir nesnenin çeşitli özellikleri ve yöntemleri olabilir:

Var kullanıcı \u003d (ad: "Tom", yaş: 24); console.log (kullanıcı.adı);

Bu durumda, nesneye kullanıcı adı verilir ve iki özelliği vardır: ad ve yaş. Bu, nesnelerin kısa bir açıklamasıdır; ilgili bölümde daha ayrıntılı bir açıklama verilmiştir.

Zayıf yazma

JavaScript zayıf yazılmış bir dildir. Bu, değişkenlerin türü dinamik olarak değiştirebileceği anlamına gelir. Örneğin:

Var xNumarası; // undefined console.log (xNumber) yazın; x Sayı \u003d 45; // sayı konsol.log (xNumber) yazın; xNumber \u003d "45"; // string string.log (xNumber) yazın;

İkinci ve üçüncü durumlarda, konsol bize 45 sayısını basacaktır, ancak ikinci durumda, xNumber değişkeni sayıyı ve üçüncü durumda dizeyi temsil edecektir.

Bu, dikkate alınması gereken ve değişkenin programdaki davranışının bağlı olduğu önemli bir noktadır:

Var xNumber \u003d 45; // tip numarası var yNumber \u003d xNumber + 5; console.log (yNumber); // 50 x Sayı \u003d "45"; // tip string var zNumber \u003d xNumber + 5 console.log (zNumber); // 455

Yukarıdaki her iki durumda da, xNumber değişkenine toplama işlemi (+) uygulanır. Ancak ilk durumda, xNumber bir sayıyı temsil eder, bu nedenle xNumber + 5'in sonucu 50 olacaktır.

İkinci durumda, xNumber bir dizeyi temsil eder. Ancak, hat ve 5 sayısı arasında ekleme işlemi mümkün değildir. Bu nedenle, 5 sayısı bir dizeye dönüştürülecek ve dizeleri birleştirme işlemi gerçekleşecektir. Ve xNumber + 5 ifadesinin sonucu "455" 'in tahliyesi olacaktır.

Operatör türü

Typeof operatörünü kullanarak bir değişkenin türünü alabilirsiniz:

Var name \u003d "Tom"; console.log (ad türü); // string var gelir \u003d 45.8; console.log (gelir türü); // sayı var isEnabled \u003d true; console.log (typeof isEnabled); // boolean var undefVariable; console.log (undefVariable türünde); // tanımsız

Veri türleri

JavaScript veri türleri iki kategoriye ayrılabilir: basit türler ve nesneler. JavaScript'teki basit türlerin kategorisi sayılar, metin dizeleri ve mantıksal (veya Boole) değerleri içerir.

Null ve undefined özel değerleri temel değerlerdir, ancak sayı, dize veya boole için geçerli değildir. Her biri kendi özel tipinden sadece bir değer tanımlar.

JavaScript'te sayı, dize, boole veya özel null veya undefined değeri olmayan herhangi bir değer bir nesnedir. nesne   (yani, nesne veri türünün bir üyesi), her biri bir ad ve değere (bir sayı veya dize gibi basit bir türden veya bir nesneden) sahip bir özellik koleksiyonudur.

Normal bir JavaScript nesnesi, adlandırılmamış değerlerin sırasız bir koleksiyonudur. JavaScript ayrıca özel bir nesne türüne sahiptir. bir dizinumaralandırılmış değerlerin düzenli bir koleksiyonunu temsil eder. JavaScript, dizilerle çalışmak için özel sözdizimi yapılarına sahiptir.

JavaScript, işlev olarak bilinen başka bir özel nesne türünü tanımlar. fonksiyon   yürütülebilir kodun ilişkilendirildiği nesnedir. Belirli bir işlemi gerçekleştirmek ve hesaplanmış bir değer döndürmek için bir işlev çağrılabilir. Diziler gibi, işlevler diğer nesne türlerinden farklı davranır ve JavaScript, onlarla çalışmak için özel bir sözdizimi tanımlar. JavaScript'teki işlevlerin en önemli özelliklerinden biri gerçek değerler olmasıdır ve JavaScript programları bunları normal nesneler gibi değiştirebilir.

Yeni oluşturulan nesneleri başlatmak için yazılan işlevlere (yeni işleç ile) çağrılır tasarımcılar. Her kurucu, özellik sınıfı   - bu kurucu tarafından başlatılan birçok nesne. Sınıflar bir nesne türünün alt tipleri olarak temsil edilebilir.

Derslere ek olarak sıra   ve fonksiyon   Temel JavaScript dili, üç yararlı sınıf daha tanımlar. sınıf tarih   Tarihleri \u200b\u200btemsil eden nesneleri tanımlar. sınıf RegExp   düzenli ifadeleri (güçlü bir kalıp eşleme aracı) temsil eden nesneleri tanımlar. Error sınıfı, JavaScript programlarında oluşabilecek sözdizimi hatalarını ve çalışma zamanı hatalarını temsil eden nesneleri tanımlar. Karşılık gelen yapıcı işlevlerini bildirerek kendi nesne sınıflarınızı tanımlamak mümkündür.

Sayılar

Birçok programlama dilinin aksine, JavaScript tamsayı ile gerçek değerleri birbirinden ayırmaz. JavaScript'teki tüm sayılar gerçek değerlerle (kayan nokta) temsil edilir. JavaScript sayıları temsil etmek için 64 bit standart biçimi kullanır IEEE 754. Bu biçim, ± 1.8 x 10 308 ila ± 5 x 10-324 arasında değişen sayıları temsil edebilir.

JavaScript'te tamsayı ondalık sayılar bir sayı dizisi olarak yazılır. Ondalık tam sayı değişmez değerlerine ek olarak, JavaScript onaltılık değerleri tanır. Onaltılık değişmez değerler, "0x" karakter dizisi ve ardından onaltılık basamak dizesi ile başlar. Onaltılık basamak, 10'dan 15'e kadar değerleri temsil eden 0'dan 9'a kadar olan rakamlardan veya A'dan F'ye kadar olan harflerden biridir:

Var a \u003d 255; var b \u003d 0xFF; // Onaltılı gösterimde 255 sayısı

Gerçek sayıların değişmezleri ondalık bir noktaya sahip olmalıdır - bu tür değişmezlerin tanımı, gerçek sayıların geleneksel sözdizimini kullanır. Gerçek değer, sayının tamsayı kısmı, ardından ondalık nokta ve sayının kesirli kısmı olarak temsil edilir.

Gerçek sayıların değişmez değerleri de üstel gösterimde temsil edilebilir: gerçek bir sayı, ardından e (veya E) harfi ve sonra isteğe bağlı bir artı veya eksi işareti ve bir tamsayı üssü. Bu gösterim şekli, üs değeriyle belirlenen güce 10 ile çarpılan gerçek bir sayıyı gösterir:

Var a \u003d 16.75; var b \u003d 2e4; // 2 * 10 ^ 4 \u003d 20.000

Aritmetik işlemler

JavaScript numaraları aritmetik işleçler kullanılarak işlenir. Bu operatörler şunları içerir: toplama operatörü +, çıkarma operatörü -, çarpma operatörü *, bölüm operatörü / ve bölüm operatörü modulo% (bölümün geri kalanını döndürür).

Bu basit aritmetik işleçlere ek olarak JavaScript, nesne özellikleri olarak kullanılabilen işlevleri ve sabitleri kullanarak daha karmaşık matematiksel işlemleri destekler matematik:

Math.pow (2,53) // 2 ile 53 Math.round (.6) 'nın gücüne // En yakın tam sayıya yuvarlayın (sonuç 1.0) Math.ceil (.6) // Yuvarla (sonuç 1.0) Math.floor ( .6) // Yuvarlama (sonuç 0) Math.abs (-5) // Sayı modülü (sonuç 5) Math.max (x, y, z) // Math.min (x, y, z) en büyük bağımsız değişkenini döndürür ) // en küçük argümanı döndürür \\ Math.random () // Yalancı rasgele sayı x; burada 0

JavaScript'teki aritmetik işlemler, taşma, önemli bitlerin kaybı veya sıfıra bölme durumunda hata atmaz. Aritmetik işlemin sonucu temsil edilebilir en büyük değerden (taşma) büyükse, JavaScript'te şu şekilde gösterilen "sonsuz" özel değeri döndürülür sonsuzluk. Benzer şekilde, negatif sonucun mutlak değeri temsil edilebilir en büyük değerden büyükse, "negatif sonsuz" değeri döndürülür. -Infinity.

Sonsuzluğu ifade eden bu özel değerler tam olarak beklediğiniz gibi davranır: sonsuzluğu herhangi bir değerle toplama, çıkarma, çarpma veya bölme sonsuzlukla sonuçlanır (muhtemelen ters işaretle).

Önemli basamakların kaybı, aritmetik bir işlemin sonucu sıfıra mümkün olan minimum değerden daha yakın olduğunda ortaya çıkar. Bu durumda, 0 sayısı döndürülür.Eğer önemli basamakların kaybı negatif bir sonuç ortaya çıkarsa, “negatif sıfır” olarak bilinen özel bir değer döndürülür. Bu özel anlam pratikte sıradan sıfırdan farklı değildir ve JavaScript programcılarının nadiren vurgulaması gerekir.

Sıfıra bölme JavaScript'te bir hata olarak kabul edilmez: bu durumda sonsuzluk veya negatif sonsuzluk basitçe döndürülür. Bununla birlikte, bir istisna vardır: sıfıra sıfıra bölme işlemi açıkça tanımlanmış bir değere sahip değildir, bu nedenle böyle bir işlemin sonucu, "sayı olmayan" özel değerini döndürür. NaN. Sonsuzluğu sonsuza bölmeye, negatif bir sayının kare kökünü çıkarmaya veya sayılara dönüştürülemeyen sayısal olmayan işlenenlerde aritmetik yapmaya çalışırken NaN değeri de döndürülür.

JavaScript, bir sayı değil pozitif sonsuzluk değerlerini depolayan Infinity ve NaN küresel değişkenlerini önceden tanımlamıştır. ECMAScript 3'te, bu değişkenler okunur / yazılır ve programlarda değiştirilebilir. ECMAScript 5 standardı bu gözetimi düzeltir ve bu değişkenlerin salt okunur olmasını gerektirir.

Tarih ve saat

Temel JavaScript dili, tarihi ve saati temsil eden nesneler oluşturmak için bir Date () yapıcısına sahiptir. Bu Date nesneleri, tarihleri \u200b\u200biçeren basit hesaplamalar yapmak için yöntemlere sahiptir. Date nesnesi sayılar gibi temel bir veri türü değildir.

// Aşırı yüklenmiş yapıcı Date () new Date (); yeni Tarih (milisaniye); yeni Tarih (tarih_dizesi); yeni Tarih (yıl, ay, gün, saat, dakika, saniye, ms)

Bağımsız değişkeni olmayan Date () yapıcısı, geçerli tarih ve saate eşit bir değere sahip bir Date nesnesi oluşturur. Yapıcıya tek bir sayısal bağımsız değişken iletilirse, getTime () yöntemi tarafından döndürülen değere benzer şekilde, tarihin milisaniye cinsinden dahili sayısal gösterimi olarak kullanılır. Tek bir dize bağımsız değişkeni iletildiğinde, Date.parse () yöntemi tarafından kabul edilen biçimde tarihin dize olarak temsil edilir.

Ek olarak, tek tek tarih ve saat alanlarını belirten iki ila yedi sayısal bağımsız değişken yapıcıya iletilebilir. Yılın ve ayın ilk iki alanı dışındaki tüm argümanlar mevcut olmayabilir. Lütfen dikkat: bu tarih ve saat alanları saate değil yerel saate dayanmaktadır. UTC (Evrensel Koordineli Zaman). Alternatif olarak, statik Date.UTC () yöntemi kullanılabilir. Date () işlevi olarak da (yeni operatör olmadan) çağrılabilir. Bu çağrı ile Date () iletilen argümanları yok sayar ve geçerli tarih ve saati döndürür.

   Date () yapıcısına iletilen bağımsız değişkenler
tartışma tayin
milisaniye İstenen tarih ile 1 Ocak 1970 gece yarısı arasındaki milisaniye sayısı (UTC). Örneğin, 5000 sayısını bağımsız değişken olarak ileterek, 1 Ocak 1970 gece yarısından beş saniye sonra temsil eden bir tarih oluşturacağız.
tarih dizesi Tarih ve (isteğe bağlı) saati dize olarak belirten tek argüman. Dize, Date.parse () için anlaşılabilir bir biçime sahip olmalıdır.
yıl Yıl dört basamak şeklinde. Örneğin, 2001-2001. Önceki JavaScript uygulamalarıyla uyumluluk için, bağımsız değişken değeri 0 ile 99 arasındaysa, bağımsız değişkene 1900 eklenir.
ay 0 (Ocak) ile 11 (Aralık) arasında bir tamsayı olarak belirtilen ay.
gün 1 ile 31 arasında bir tamsayı olarak belirtilen ayın günü. Bu bağımsız değişken için en küçük değerlerin 1 ve kalan bağımsız değişkenlerin 0 olduğunu unutmayın. İsteğe bağlı bir bağımsız değişken.
saat Tamsayı olarak belirtilen saatler 0 (gece yarısı) ile 23 (23:00) arasındadır. İsteğe bağlı argüman.
dakika Dakika olarak dakika cinsinden 0 ile 59 arasında bir tamsayı olarak belirtilir. İsteğe bağlı bağımsız değişken.
saniye Dakika cinsinden saniye olarak 0 ile 59 arasında bir tamsayı olarak belirtilir. İsteğe bağlı bağımsız değişken.
ms Milisaniye cinsinden saniye, 0 ile 999 arasında bir tamsayı olarak belirtilir. İsteğe bağlı bağımsız değişken.

Date nesnesinin yazma veya okuma özelliği yoktur; bunun yerine tarih ve saat değerlerine yöntemlerle erişilir. Date nesnesinin çoğu yöntemi iki forma sahiptir: biri yerel saatle, diğeri evrensel saatle (UTC veya GMT) çalışmak içindir. Yöntemin adı "UTC" dizesini içeriyorsa, evrensel saatle çalışır.

Date nesnesi yöntemleri yalnızca Date türündeki nesneler için çağrılabilir ve başka türde nesneler için çağrıldıklarında bir TypeError istisnası atarlar.

   Tarih Nesnesi Yöntemleri
yöntem tanım
getDate (), getUTCDate (), setDate (), setUTCDate () Bir Date nesnesinden ayın gününü yerel veya evrensel saate göre alır / ayarlar.
getDay (), getUTCDay () Bir Date nesnesinden yerel veya evrensel saate göre haftanın gününü döndürür.
getFullYear (), getUTCFullYear (), setFullYear (), setUTCFullYear () Tarih yılını yerel veya evrensel saatte tam dört basamaklı biçimde döndürür / ayarlar.
getHours (), setUTCHours (), setHours (), setUTCHours () Bir Date nesnesindeki saat alanını yerel veya evrensel saatte alır / ayarlar.
getMilliseconds (), getUTCMilliseconds (), setMilliseconds (), setUTCMilliseconds () Bir Date nesnesindeki milisaniye alanını yerel veya evrensel zamanda alır / ayarlar.
getMinutes (), getUTCMinutes (), setMinutes (), setUTCMinutes () Bir Date nesnesindeki dakika alanını yerel veya evrensel zamanda alır / ayarlar.
getMonth (), setUTCMonth (), setMonth (), setUTCMonth () Bir Date nesnesindeki ay alanını yerel veya evrensel zamanda alır / ayarlar.
getSeconds, getUTCSeconds (), setSeconds, setUTCSeconds () Bir Date nesnesindeki saniye alanını yerel veya evrensel zamanda alır / ayarlar.
getTime (), setTime () Bir Date nesnesinin dahili gösterimini (milisaniye) alır / ayarlar. Lütfen dikkat: bu değer saat dilimine bağlı değildir, bu nedenle ayrı bir getUTCTime () yöntemine gerek yoktur.
getTimezoneOffset () Yerel ve evrensel tarih gösterimleri arasındaki dakika cinsinden farkı dakika cinsinden döndürür. Lütfen dikkat: dönüş değeri, yaz saati uygulamasının belirtilen tarih için geçerli olup olmadığına bağlıdır.
getYear (), setYear () Date nesnesinde yıl alanını alır / ayarlar. Eski olduğu kabul edilirse, bunun yerine getFullYear () ve setFullYear () yöntemlerinin kullanılması önerilir..
toDateString () Yerel saat dilimi için Tarih'ten tarihi temsil eden bir dize döndürür.
toGMTString () Tarihi, GMT saat dilimini temel alan bir dizeye dönüştürür. Onaylanmadığı için bunun yerine toUTCString () yöntemi önerilir.
toISOString () Tarih / saat ve UTC formatlarını birleştirerek ISO-8601 standardını kullanarak Tarihi bir dizeye dönüştürür.
toJSON () ToISOString () yöntemini kullanarak Date nesnesini JSON biçiminde seri hale getirir.
toLocaleDateString () Yerel tarih biçimlendirme kurallarına göre yerel saat dilimindeki Tarih'ten tarihi temsil eden bir dize döndürür.
toLocaleString () Tarihi yerel saat dilimi ve yerel tarih biçimlendirme kurallarına göre bir dizeye dönüştürür.
toLocaleTimeString () Yerel saat biçimlendirme kurallarına göre yerel saat dilimindeki Tarih'ten saati temsil eden bir dize döndürür.
toString () Tarihi yerel saat dilimine göre bir dizeye dönüştürür.
toTimeString () Yerel saat dilimindeki Tarih'ten saati temsil eden bir dize döndürür.
toUTCString () Evrensel saati kullanarak Tarihi dizeye dönüştürür.
valueOf () Bir Date nesnesini dahili milisaniye biçimine dönüştürür.

Listelenen örnek yöntemlerine ek olarak, Date nesnesinde üç statik yöntem tanımlanır. Bu yöntemler, bağımsız Date nesneleri aracılığıyla değil, Date () yapıcısının kendisiyle çağrılır:

Date.now ()

Geçerli saati milisaniye olarak döndürür.

Date.parse ()

Bir tarih ve saatin dize olarak temsilini ayrıştırır ve o tarihin dahili gösterimini milisaniye olarak döndürür.

Date.UTC ()

Belirtilen UTC tarih ve saatinin milisaniye cinsinden bir temsilini döndürür.

Bir Date nesnesi, JavaScript dilinde gömülü bir veri türüdür. Date nesneleri, daha önce sunulan yeni Date () sözdizimi kullanılarak oluşturulur.

Bir Date nesnesi oluşturduktan sonra, onun birçok yöntemini kullanabilirsiniz. Yöntemlerin çoğu, yıl, ay, gün, saat, dakika, saniye ve milisaniye alanlarını yerel saate veya UTC saatine (evrensel veya GMT) göre almanıza ve ayarlamanıza olanak tanır. ToString () yöntemi ve değişkenleri tarihleri \u200b\u200bokunabilir dizelere dönüştürür.

getTime () ve setTime (), 1 Ocak 1970'te gece yarısından (GMT) bu yana geçen milisaniye sayısını Date nesnesinin dahili gösterimine dönüştürür veya bunun tersini yapar. Bu standart milisaniye biçiminde, tarih ve saat bir olarak temsil edilir, bu da tarihi aritmetik olarak çok basitleştirir. ECMAScript standardı, bir Date nesnesinin 01/01/1970 tarihinden önce ve sonra 100 milyon gün içinde milisaniye hassasiyetinde herhangi bir tarih ve saati temsil etmesini gerektirir. Bu aralık ± 273.785 yıldır, bu nedenle JavaScript saati 275.755 yıla kadar doğru çalışır.

Tarih Nesnesi Örnekleri

Oluşturulan Date nesnesiyle çalışmak için bilinen birçok yöntem vardır:

  // Geçerli tarihi ve saati al d \u003d new Date (); // Date document.write ("Today:" + d.toLocaleDateString () + "."); // Saati göster document.write ("Saat:" + d.toLocaleTimeString ()); // Haftanın günü var dayOfWeek \u003d d.getDay (); // Bir gün izin var mı? var hafta sonu \u003d (dayOfWeek \u003d\u003d 0) || (dayOfWeek \u003d\u003d 6);

Aşağıda, bir Date nesnesi kullanan bir saate basit bir örnek verilmiştir. Burada, saati her saniye güncellemek için setTimeout () yöntemi kullanılır:

İşlev zamanlayıcı () (// h1 \u003d document.getElementsByTagName ("h1") belgesindeki h1 öğesini bulun; // tarihi ayarlayın var date \u003d new Date (); var hours \u003d date.getHours (); var minutes \u003d date.getMinutes (); var saniye \u003d date.getSeconds (); eğer (saat)

Sayfa düzeni oldukça basittir ve gövde öğesinin onload () olay işleyicisindeki timer () işlevini bağlar:

hatlar

Bir dize, her biri genellikle bir Unicode karakterini temsil eden değişmez, sıralı bir 16 bit değerin dizisidir. JavaScript dizeleri metni temsil etmek için kullanılan bir veri türüdür. Bir dizenin uzunluğu, içinde bulunan 16 bitlik değerlerin sayısıdır. JavaScript dilinde dizelerdeki (ve dizilerdeki öğelerin) karakter sayısı sıfırdan başlar: ilk 16 bitlik değer 0 konumunda, ikincisi konum 1'de vb. Boş bir dize, uzunluğu 0 olan bir dizedir.

JavaScript, bir dizenin tek bir öğesini temsil eden özel bir türe sahip değildir. Tek bir 16 bit değerini temsil etmek için, uzunluğu 1'e eşit olan bir dize basitçe kullanılır.

Bir JavaScript programına dize değişmezi eklemek için dize karakterlerini tek veya çift tırnak işaretleri içine alın ("veya"). Tek tırnak işaretleri ile ayrılmış dizelerde çift tırnak işaretleri ve çift tırnak işaretleri ile ayrılmış dizelerde tek tırnak işaretleri bulunabilir. Aşağıda, dizgi değişmezlerine bazı örnekler verilmiştir:

Var str \u003d ""; // Boş dize str \u003d "basit dize"; str \u003d "içinde tırnak işareti bulunan dize"; str \u003d "Bu dize değişmezinde, \\ ntwo lines";

ECMAScript 3'te, dize değişmezleri programın bir satırına yazılmalıdır ve iki satıra bölünemez. Bununla birlikte, ECMAScript 5'te, dize değişmezleri, bir ters eğik çizgi karakteri (\\) ile son satır hariç her satırla biten birden çok satıra bölünebilir. Ters eğik çizgi karakterlerinin hiçbiri ve sonraki satır beslemeleri dizgi hazır bilgisine dahil edilmez. Bir dizgi değişmezine yeni satır karakteri eklemek için \\ n karakter dizisini kullanın (yukarıda gösterildiği gibi).

Ters eğik çizgi karakterinin (\\) JavaScript dizelerinde özel bir amacı vardır. Takip eden karakterlerle birlikte, dizenin içinde başka şekillerde temsil edilemeyen bir karakteri belirtir. Örneğin, \\ n kaçış sırası   yeni satır karakteri.

Başka bir örnek \\ "dizisi, tek bir tırnak işareti anlamına gelir. Bu kontrol sekansı, tek tırnak içine alınmış bir dizgi hazır bilgisine tek bir tırnak karakteri eklemek için gereklidir. Şimdi bu sekanslara neden kontrol karakterleri dediğimiz anlaşılıyor - burada ters eğik çizgi karakteri karakterin yorumunu kontrol etmenizi sağlıyor tek tırnak Bir satırın sonunu onunla işaretlemek yerine, kesme işareti olarak kullanırız:

Var str \u003d "\\" JavaScript \\ "- yorumlanmış programlama dili";

Aşağıdaki tabloda JavaScript kaçış dizileri ve belirledikleri karakterler listelenmiştir. İki kaçış dizisi genelleştirilir; onaltılı sayı olarak bir Latin-1 veya Unicode kümesinden bir karakter kodu belirterek herhangi bir karakteri temsil etmek için kullanılabilir. Örneğin, \\ xA9 dizisi, Latince-1'de onaltılı A9 koduyla kodlanan bir telif hakkı sembolünü belirtir. Benzer şekilde, \\ u ile başlayan bir kontrol dizisi, dört onaltılık basamakla belirtilen rastgele bir Unicode karakterini belirtir. Örneğin, \\ u03c0 π sembolünü gösterir.

JavaScript kaçış dizileri
sekans Temsil edilen karakter
\0 NUL karakteri (\\ u0000)
\\ b Tersine Hareket (\\ u0008)
\\ t Yatay sekme (\\ u0009)
\\ n Satır besleme (\\ u000A)
\\ v Dikey Sekme (\\ u000B)
\\ f Sayfa Çevirisi (\\ u000C)
\\ r Satır Başı (\\ u000D)
\" Çift tırnak işareti (\\ u0022)
\" Tek tırnak işareti (\\ u0027)
\\ Ters eğik çizgi (\\ u005C)
\\ xZZ İki onaltılık rakam ZZ tarafından verilen Latin-1 karakteri
\\ uxZZZZ Dört onaltılık basamaklarla belirtilen Unicode karakter ZZZZ

\\ Karakteri bu tabloda gösterilenlerden başka bir karakterden önce gelirse, ters eğik çizgi yok sayılır (ancak gelecekteki sürümlerde elbette yeni kaçış dizileri tanımlanabilir). Örneğin, \\ #, # ile aynıdır. Son olarak, yukarıda belirtildiği gibi, ECMAScript 5 standardı, bir satır kesmeden önce çok satırlı dize değişmezlerine ters eğik çizgi karakteri eklemenizi sağlar.

Dizelerle çalışma

Yerleşik JavaScript özelliklerinden biri, dizeleri birleştirme yeteneğidir. + İşleci sayılara uygulanırsa, satırlar eklenirse satırlara birleştirilirse, ikinci satır birincinin sonuna eklenir. Örneğin:

Var str \u003d "Merhaba," + "dünya!"; // Dizeyi al Merhaba dünya! // Dizeyi var name \u003d "Alexander" değişkeniyle birleştirin; str \u003d "Hoş geldiniz," + ad + "!";

JavaScript dizeleri bir nesne ile temsil edilir sicimdizenin geçirildiği bir yapıcıya sahip olmak. String () işlevi yapıcı olarak çağrıldığında (yeni işleç ile), s dizesini veya s dizesini temsil eden bir String nesnesi döndürür. Yeni işleç olmadan çağrılan String () yapıcısı, s'yi bir temel dize değerine dönüştürür ve dönüştürülen değeri döndürür:

Yeni Dizeler; // yapıcı işlevi Dize (ler); // dönüştürme işlevi

String nesnesinin tek bir özelliği vardır - uzunlukbir dizedeki karakter sayısını döndürür.

Aşağıdaki tabloda, String nesnesinin yöntemleri listelenmektedir:

   Dize sınıfı yöntemleri
yöntem tanım Kullanım örneği
charAt () Dizeden belirtilen konumdaki karakteri alır. Dizedeki ilk karakterin sayısı sıfırdır.    var str \u003d "Merhaba dünya!"; document.write (str.charAt (4)); // Sonuç "o"
charCodeAt () Belirtilen konumdaki karakterin kodunu döndürür. (Dizedeki n'inci karakterin Unicode kodu, 0 ile 65,535 arasında 16 bitlik bir tamsayıdır.)   var str \u003d "Merhaba dünya!"; document.write (str.charCodeAt (4)); // Sonuç 111 - "o" karakter kodu
concat () Bir veya daha fazla değeri bir dize ile birleştirir. concat () tüm bağımsız değişkenlerini dizelere dönüştürür (gerekirse) ve dizenin sonuna ekler. Sonuçta elde edilen birleştirilmiş dizeyi döndürür.   // Bir satır alın (yeni String ()) Concat ("Memnun kaldık", "hoş geldiniz", "sitemizde sizsiniz");
indexOf (alt dize, başlangıç) Arama dizesini içerip içermediğini görmek için dizeyi baştan sona arar. Başlangıç \u200b\u200bargümanı belirtilmezse, arama satırın başlangıç \u200b\u200bkonumunda veya satırın başında başlar.

Bir alt dize bulunursa, String.indexOf (), dizedeki alt dizenin ilk oluşumunun ilk karakterinin konumunu döndürür. Bir dizedeki karakter konumları sıfırdan numaralandırılmıştır. Dizede hiçbir alt dize bulunmazsa, String.indexOf () -1 döndürür.

  var str \u003d "Merhaba dünya!"; if (str.indexOf ("dünya", 0)! \u003d -1) document.write ("Kaynak dizede \\" dünya \\ "alt dizesi bulundu.");
lastIndexOf () Sondan bir dizedeki bir karakteri veya alt dizeyi arar.   var str \u003d "Merhaba dünya!"; document.write ("Kaynak satırındaki" o "son harfinin konumu:" + + str.lastIndexOf ("o")); // Sonuç 8
localeCompare () Dizeleri ulusal alfabe harflerindeki karakter sırasına göre karşılaştırır. Karşılaştırmanın sonucunu gösteren bir sayı döndürür. Dize hedef dizeden "küçük" ise, localeCompare () negatif bir sayı döndürür. Dize hedef dizeden "büyük" ise yöntem pozitif bir sayı döndürür. Dizeler bölgesel sıralama kurallarına göre özdeş veya ayırt edilemiyorsa, yöntem 0 değerini döndürür.

İşleçler dizelere uygulandığında, karşılaştırmalar yalnızca bu karakterlerin Unicode kodlarında gerçekleştirilir; Mevcut bölgede kabul edilen sıralama düzeni dikkate alınmamaktadır. Bu şekilde sıralama her zaman doğru değildir.

ECMAScript standardı, bölgelere göre karşılaştırmaların nasıl yapılacağını belirtmez; sadece bu işleve işletim sistemi tarafından tanımlanan sıralama düzeni tarafından yönlendirildiğini belirtir.

  var str1 \u003d "String1"; var str2 \u003d "String2"; if (str1.localeCompare (str2)! \u003d 0) document.write ("Satırlar aynı değil");
maç () Normal ifadeyi kullanarak kalıp eşleşmesi gerçekleştirir.   var str \u003d "1 artı 2 eşittir 3". eşleşme (/ \\ d + / g); // Bir dizi döndürür ("1", "2", "3")
değiştir () Replace () yöntemi, bir dizede arama ve değiştirme işlemi gerçekleştirir. Dizede, normal ifadeyle eşleşen bir veya daha fazla alt dizeyi arar ve bunları değiştirir.

Normal ifadede "g" genel özniteliği belirtilirse, replace (), bulunan tüm alt dizelerin yerini alır. Aksi takdirde, yöntem yalnızca bulunan ilk alt dizenin yerini alır.

ECMAScript v3 standardı, replace () yöntemine ilişkin ikinci bağımsız değişkenin bir dize değil, bir işlev olabileceğini tanımlar. Bu durumda, bulunan her eşleşme için işlev çağrılır ve onun tarafından döndürülen dize, değiştirilecek metin olarak kullanılır.

  var str \u003d "javascript yorumlanmış bir programlama dilidir."; // "JavaScript" kelimesindeki harflerin doğru yazıldığından emin olmak str \u003d str.replace (/ JavaScript / i, "JavaScript");
arama () Search () yöntemi, dizede regexp normal ifadesiyle eşleşen alt dizeyi arar ve bulunan alt dizenin ilk karakterinin konumunu veya eşleşme bulunmazsa -1 değerini döndürür.

Yöntem "g" bayrağını yoksayarak genel arama gerçekleştirmez. Ayrıca regexp.lastIndex özelliğini yok sayar ve her zaman dizenin başından itibaren arar, bu nedenle her zaman dizede bulunan ilk eşleşmenin konumunu döndürür.

  var str \u003d "JavaScript, yorumlanmış bir programlama dilidir."; i \u003d str.search ("dil"); // Sonuç 30 (kaynak satırdaki "dil" sözcüğünün konumu)
dilim () Slice () yöntemi, bir dizenin bir parçasını veya alt dizesini içeren bir dize döndürür, ancak dizeyi değiştirmez.

İlk argüman, parçanın başlaması gereken satırdaki dizindir. Bu argüman negatifse, satırın sonundan ölçülen konumu gösterir. Yani, -1 son karaktere, -2 - sondan ikinciye vb. Karşılık gelir.

İkinci argüman, özüt parçasının bitiminden hemen sonra kaynak dizginin karakter dizinidir. Belirtilmezse, parça satırın başından sonuna kadar olan tüm karakterleri içerir. Bu argüman negatifse, satırın sonundan sayılan konumu gösterir.

  var str \u003d "abjeggejik"; str1 \u003d str. dilim (0.4); // "abvg" str2 \u003d str.slice (2,4); // "vg" str3 \u003d str.slice (4) döndürür; // "deji" yi döndürür str4 \u003d str.slice (3, -1); // gdeji str5 \u003d str.slice (3, -2) döndürür; // "burada" döndürür str6 \u003d str.slice (-4, -2); // "zhz" değerini döndürür
split () Bir dizeyi, belirtilen sınırlayıcı dizeyle bir dizgi dizisine böler.

Split () yöntemi, belirtilen dizenin bir alt dizeleri dizisi oluşturur ve döndürür ve döndürülen dizinin boyutu belirtilen sınırı (ikinci bağımsız değişkenden geçirilir) aşmaz. Bu alt dizeler, satırın başından sonuna kadar ayırıcıya (ilk argüman) karşılık gelen metni arayarak ve bulunan metinden önce ve sonra satırı kırarak oluşturulur. Sınırlayıcı metin, döndürülen satırların hiçbirine dahil edilmez.

  // split () yöntemi, son derece yapılandırılmış dizelerle çalışırken kullanışlıdır var str \u003d "1: 2: 3: 4: 5"; str.split (":"); // ["1", "2", "3", "4", "5"] str \u003d "a || b || c" döndürür; str.split ("||"); // Döndürür ["a", "b", "c"] // Bir dizeyi bir karakter dizisine bölmek için // boş bir dizeyi ayırıcı olarak alır str \u003d "merhaba"; str.split (""); // ["h", "e", "l", "l", "o"] str.split ("", 3) döndürür; // ["h", "e", "l"] döndürür
substr () Substr () yöntemi, bir dizenin alt dizesini ayıklar ve döndürür, ancak dizeyi değiştirmez. Not: substr () yöntemi, karakter konumunu ve uzunluğunu kullanarak gerekli alt dizeyi ayarlar. Bu sayede, alt dizenin iki karakter konumu ile belirtildiği String.substring () ve String.splice () yöntemlerine uygun bir alternatif görünür. Yöntemin ECMAScript'te standartlaştırılmadığı ve bu nedenle kullanımdan kaldırıldığı belirtilmelidir.   var str \u003d "abjeggejik"; str \u003d str.substr (2,5); // Sonuç "vgdezh"
substring () String.substring () yöntemi, (birinci bağımsız değişken) ile (ikinci bağımsız değişken) arasındaki konumlar arasındaki karakterleri içeren bir dizenin alt dizesini döndürür. "From" konumundaki karakter alt dizeye dahil edilir ve "to" konumundaki karakter dahil edilmez.   var str \u003d "abjeggejik"; str \u003d str.substring (2,7); // Sonuç "vgdezh"
toLowerCase () Tüm karakterlerin küçük olduğu dizenin bir kopyasını döndürür.   var str \u003d "JavaScript"; str \u003d str.toLowerCase (); // Sonuç "javascript"
toString () Temel bir dize değeri döndürür. Bu yöntemin çağrılması nadiren gereklidir. String nesnesi olmayan bir nesnede yöntem çağrılırsa, TypeError istisnası atılır.
toUpperCase () Tüm karakterlerin büyük harfli olduğu bir dizenin kopyasını döndürür.   var str \u003d "JavaScript"; str \u003d str.toUpperCase (); // Sonuç "JAVASCRIPT"
kırpma () Tüm önde gelen ve arkadaki boşluk karakterlerinin kaldırıldığı dizenin bir kopyasını döndürür.
valueOf () Temel bir dize değeri döndürür (nadiren kullanılanString () işlevine benzer).

JavaScript'in ilk günlerinden itibaren String sınıfı, HTML etiketleri ekleyerek değiştirilmiş bir dizeyi döndüren birkaç yöntem tanımlar. Bu yöntemler hiçbir zaman ECMAScript'te standartlaştırılmamıştır, ancak hem istemci hem de sunucu JavaScript komut dosyalarında dinamik olarak HTML işaretlemesi oluşturmanıza olanak tanır. Standart olmayan yöntemleri kullanmaya hazırsanız, kalın yeşil renkteki bir köprü için HTML biçimlendirmesini aşağıdaki gibi oluşturabilirsiniz:

Bu yöntemler standartlaştırılmadığından, onlar için ayrı referans makaleleri yoktur.

Boole değerleri

Mantıksal anlam, bir şeyin gerçeğinden veya sahtelikinden bahseder. Bir mantıksal veri türünün yalnızca iki geçerli mantıksal değeri vardır. Bu iki değer doğru ve yanlış değişmezleriyle gösterilir.

Boole değerleri genellikle JavaScript programlarında gerçekleştirilen karşılaştırma işlemlerinin sonucudur. Örneğin:

Bu ifade, a değişkeninin değerinin 4'e eşit olup olmadığını kontrol eder. Evetse, bu karşılaştırmanın sonucu true mantıksal değeri olacaktır. A değeri 4 değilse, karşılaştırmanın sonucu yanlış olur.

Boole değerleri, JavaScript kontrol yapılarında yaygın olarak kullanılır. Örneğin, JavaScript'teki bir if / else deyimi, boolean değeri true ise bir eylem, false ise başka bir eylem gerçekleştirir. Tipik olarak, bir boolean oluşturan bir karşılaştırma doğrudan kullanıldığı deyimle birleştirilir. Sonuç şuna benzer:

(A \u003d\u003d 4) (// ...) başka (// ...)

JavaScript'teki herhangi bir değer bir boole değerine dönüştürülebilir. Böyle bir dönüşümün sonucu olarak aşağıdaki değerler, bir boolean değeri verir (ve sonra şu şekilde çalışır) false:

Tanımsız null 0 -0 NaN "" // boş dize

Tüm nesneler (ve diziler) dahil olmak üzere diğer tüm değerler dönüştürüldüğünde, değerin doğru olmasına (ve bunun gibi çalışmasına) neden olur. Dönüşüm sırasında false değerine ve bu değere dönüştürülen altı değere bazen false denir ve diğer tüm değerlere true denir. Herhangi bir bağlamda, JavaScript yorumlayıcısı bir boole almayı beklediğinde, false değerleri false olarak ve true değerleri true olarak yorumlanır.

Boolean değerleri, bu değerleri true veya false değerine dönüştürmek için kullanılabilecek toString () yöntemine sahiptir, ancak başka yararlı yöntemleri yoktur.

Boş ve tanımlanmamış değerler

JavaScript'teki null anahtar sözcüğünün özel bir amacı vardır ve genellikle bir değerin olmadığını belirtmek için kullanılır. Null için typeof operatörü, "object" dizesini döndürür; bu, null özel bir "boş" nesne anlamına gelir. Bununla birlikte, pratikte null genellikle kendi türünün tek üyesi olarak kabul edilir ve sayı, dize veya nesne gibi bir değerin yokluğunun bir işareti olarak kullanılabilir. Diğer programlama dillerinin çoğu, JavaScript'te null değerine benzer değerlere sahiptir: bunları null veya nil olarak biliyor olabilirsiniz.

JavaScript'in bir değerinin olmadığını belirten bir değeri daha vardır. Herhangi bir değerin tamamen bulunmadığını gösteren tanımsız bir değer. Daha önce hiç bir değer atanmamış olan bir değişkenin yanı sıra bir nesnenin veya bir dizinin öğesinin var olmayan bir özelliğine erişildiğinde döndürülür. Ayrıca, tanımlanmamış değer, dönüş değeri olmayan işlevler tarafından döndürülür ve çağrıldığında iletilmeyen bağımsız değişkenler için işlev parametrelerine atanır.

Undefined tanımlayıcısı, undefined olarak başlatılmış olan, önceden tanımlanmış bir global değişkenin adıdır (null gibi bir anahtar kelimenin değil). ECMAScript 3'te undefined, başka bir değer atanabilen bir okuma / yazma değişkenidir. Bu sorun ECMAScript 5'te giderilmiştir ve bu standarda uyan JavaScript uygulamalarında tanımsız değişken salt okunurdur. Tanımlanmamış bir değerin typeof operatörü, "undefined" dizesini döndürür ve bu değerin özel bir türün tek üyesi olduğunu belirtir.

Bu farklılıklara rağmen, hem null hem de undefined değersiz bir işarettir ve genellikle değiştirilebilir. Eşitlik operatörü \u003d\u003d onları eşit kabul eder. (Bunları bir programda ayırt etmek için, \u003d\u003d\u003d kimlik operatörünü kullanabilirsiniz.) Her ikisi de yanlış değerlerdir - mantıksal bir bağlamda, yanlış olarak yorumlanır. Ne boş, ne de tanımsız herhangi bir özellik veya yöntem içermez. Uygulamada, kullanma girişimi. veya bu değerlerin bir özelliğine veya yöntemine erişmek için bir TypeError hatası atar.

Undefined değeri, bir değerin beklenmedik veya hatalı yokluğunun bir işareti olarak kabul edilebilir ve normal veya iyi beklenen bir değerin yokluğunun bir işareti olarak null olarak kabul edilebilir.. Programın bu değerlerden birini bir değişkene veya özelliğe ataması veya bu değerlerden birini bir işleve geçirmesi gerekiyorsa, neredeyse her zaman null kullanılması tercih edilir.

Değişmez basit değerler ve değişken nesnelere referanslar

JavaScript'te basit değerler (tanımlanmamış, boş, mantıksal değerler, sayılar ve dizeler) ve nesneler (diziler ve işlevler dahil) arasında temel farklar vardır. Basit değerler değiştirilemez: basit bir değer değiştirilemez. Bu sayılar ve mantıksal değerler için açıktır - bir sayının değerini değiştirmenin bir anlamı yoktur.

Ancak, dizeler için bu daha az belirgindir. Dizeler karakter dizileri olduğundan, karakterleri bir dizede bir veya başka bir konumda değiştirme olasılığını beklemek doğal olacaktır. JavaScript buna gerçekten izin vermez ve ilk bakışta değiştirilmiş bir dize döndüren tüm dize yöntemleri aslında yeni bir dize değeri döndürür. Örneğin:

Var str \u003d "basit dize"; st. dilim (8.14); console.log (str); // "Basit bir dize" görüntüler // Bir dizeyi açıkça değiştirmek için str \u003d str.slice (8,14) atamasını kullanın; console.log (str); // "string" i göster

Ek olarak, basit tiplerin değerleri değere göre karşılaştırılır: aynı değere sahip olmaları durumunda iki değer aynı kabul edilir. Sayılar, booleans, null ve undefined için, bu açık görünüyor: bunları karşılaştırmanın başka bir yolu yok. Ancak, dizeler için bu ifade çok açık görünmüyor. İki dize değerini karşılaştırırken, JavaScript bunları yalnızca aynı uzunlukta ve aynı karakterleri ilgili konumlarında içeriyorsa, aynı kabul eder.

Nesneler basit türlerden farklıdır. İlk olarak, değiştirilebilirler - değerleri değiştirilebilir:

Var o \u003d (x: 1); // o.x \u003d 2 nesnesinin başlangıç \u200b\u200bdeğeri; // o.y \u003d 3 özelliğinin değerini değiştirerek değiştirin; // Yeni bir özellik ekleyerek değiştirin var a \u003d; // Diziler de değiştirilebilir \u003d a \u003d 0; // a \u003d 4 dizisinin ilk elemanının değerini değiştirin; // Yeni bir öğe ekle (dizin 3, dizideki dördüncü konuma karşılık gelir)

Nesneler değerle karşılaştırılmaz: aynı değerlere sahip aynı özellik kümelerine sahip olsalar bile, iki nesne eşit kabul edilmez. Ve aynı diziyi izleyen aynı öğe kümesine sahip olsalar bile, iki dizinin eşit olduğu düşünülmez.

Basit JavaScript türlerinden farkı vurgulamak için, nesnelere bazen referans türleri denir. Bu terminolojiyi izlerseniz, nesnelerin değerleri bağlantılardır ve nesnelerin referans olarak karşılaştırıldığını söyleyebiliriz: iki nesnenin değerleri, yalnızca ve yalnızca bellekteki aynı nesneye başvuruyorsa eşit kabul edilir.

Var a \u003d; // Değişken a, boş bir diziyi ifade eder. var b \u003d a; // Şimdi b aynı diziye başvuruyor. b 1; // b değişkenindeki başvuruyu kullanarak diziyi değiştirin. console.log (a \u003d\u003d\u003d b); // "true" console.log ("a \u003d" + a) döndürür; // b nesnesinin değiştirilmesi, nesneyi a değiştirir.

Yukarıdaki örnekte olduğu gibi, bir değişkene bir nesne (veya dizi) atama işlemi aslında bir bağlantı atar: nesnenin yeni bir kopyasını oluşturmaz. Programın bir nesnenin veya dizinin yeni bir kopyasını oluşturması gerekiyorsa, nesnenin veya dizinin öğelerinin özelliklerini açıkça kopyalamanız gerekir.

  typeof   işleci değerlendirilmemiş işlenen türünü belirten bir dize döndürür.

Bu etkileşimli örneğin kaynağı GitHub deposunda saklanır. Etkileşimli örnekler projesine katkıda bulunmak istiyorsanız, lütfen https://github.com/mdn/interactive-examples adresini kopyalayın ve bize bir çekme isteği gönderin.

sözdizimi

Typeof operatörünü onun işlenen izler:

typeof işlenentypeof ( işlenen)

Parametreler

   işlenen Nesneyi temsil eden veya türü döndürülecek bir ifade.

tanım

Aşağıdaki tablo, typeof öğesinin olası dönüş değerlerini özetler. Türler ve temel öğeler hakkında daha fazla bilgi için ayrıca JavaScript veri yapısı sayfasına bakın.

tip sonuç
  "Tanımsız"
boş   "nesne" (bkz.)
Boole   "Boolean"
sayı   "Sayı"
BigInt   "Bigint"
sicim   "Dize"
Sembol (ECMAScript 2015'te yeni)   "Sembol"
Ana bilgisayar nesnesi (JS ortamı tarafından sağlanır) Uygulama bağımlı
İşlev nesnesi (ECMA-262 terimiyle [] uygular)   "İşlev"
Başka herhangi bir nesne   "Nesne"

Örnekler

// Sayılar 37 \u003d\u003d\u003d "sayı"; typeof 3.14 \u003d\u003d\u003d "sayı"; typeof (42) \u003d\u003d\u003d "sayı"; typeof Math.LN2 \u003d\u003d\u003d "sayı"; typeof Infinity \u003d\u003d\u003d "sayı"; typeof NaN \u003d\u003d\u003d "sayı"; // Number ("1") \u003d\u003d\u003d "number" "A-Sayı Değil" türünde olmasına rağmen; // Sayı, şeyleri typeof Number ile karşılaştırmaya çalışır. Number ("shoe") \u003d\u003d\u003d "number"; // 42n \u003d\u003d\u003d "bigint" türünde bir sayıya zorlanamayan değerler dahil; // "" \u003d\u003d\u003d "string" dizeleri; typeof "bla" \u003d\u003d\u003d "dize"; typeof `template literal` \u003d\u003d\u003d" dize "; typeof "1" \u003d\u003d\u003d "dize"; // bir dize içindeki bir sayının hala typeof dizesi olduğunu unutmayın typeof (typeof 1) \u003d\u003d\u003d "string"; // typeof her zaman bir dize döndürür typeof String (1) \u003d\u003d\u003d "string"; // String her şeyi toString'den daha güvenli bir dizeye dönüştürür // Booleans typeof true \u003d\u003d\u003d "boolean"; typeof false \u003d\u003d\u003d "boole"; typeof Boolean (1) \u003d\u003d\u003d "boolean"; // Boolean (), değerleri "doğruluk mu yoksa yanlış tipte olmalarına" göre dönüştürecektir !! (1) \u003d\u003d\u003d "boolean"; //! (Mantıksal DEĞİL) operatörünün iki çağrısı Boolean () // ile aynı Semboller typeof Symbol () \u003d\u003d\u003d "symbol" typeof Symbol ("foo") \u003d\u003d\u003d "symbol" typeof Symbol.iterator \u003d\u003d\u003d "symbol" // Tanımsız typeof undefined \u003d\u003d\u003d "undefined"; typeof bildirilenButUndefinedVariable \u003d\u003d \u003d "undefined"; typeof undeclaredVariable \u003d\u003d\u003d "undefined"; // Normal nesneleri ayırt etmek için typeof (a: 1) \u003d\u003d\u003d "object"; // Array.isArray veya Object.prototype.toString.call // kullanın dizilerden typeof \u003d\u003d\u003d "object"; typeof new Date () \u003d\u003d\u003d "object"; typeof / regex / \u003d\u003d\u003d "object"; // Geçmiş sonuçları için Düzenli ifadeler bölümüne bakın // Aşağıdakiler kafa karıştırıcı, tehlikeli onlardan kaçının. typeof new Boolean (true) \u003d\u003d\u003d "object"; typeof new Number (1) \u003d\u003d\u003d "object"; typeof new String ("abc") \u003d\u003d\u003d "object"; // İşlevler typeof function () () \u003d\u003d\u003d "function"; typeof class C () \u003d\u003d\u003d "function"; typeof Math.sin \u003d\u003d\u003d "işlev n ";

Ek bilgi

boş

   // JavaScript başlangıcından bu yana duruyor typeof null \u003d\u003d\u003d "object";

JavaScript'in ilk uygulamasında, JavaScript değerleri bir tür etiketi ve bir değer olarak temsil edildi. Nesneler için tür etiketi 0'dır. Null, NULL işaretçisi olarak gösterilir (çoğu platformda 0x00). Sonuç olarak, null tür etiketi olarak 0'a sahipti, bu nedenle dönüş değerinin "object" türüne sahipti. (Referans)

ECMAScript için bir düzeltme önerildi (katılma yoluyla), ancak reddedildi. Bunun sonucu null \u003d\u003d\u003d "null" olur.

Yeni operatör kullanma

// Tüm yapıcı işlevleri, İşlev yapıcı hariç, her zaman "object" türünde olur var str \u003d new String ("String"); var num \u003d yeni Sayı (100); typeof str; // num nesne "nesne" döndürecektir; // "object" döndürecektir var func \u003d new Function (); fonk türü; // "Fonksiyon" döndürecek

Sözdiziminde parantez ihtiyacı

   // Parantezler, ifadelerin veri türünü belirlemek için kullanılabilir. var iData \u003d 99; iData + "Wisen" yazın; // "sayı Wisen" typeof (iData + "Wisen"); // "dize"

Düzenli ifadeler

Çağrılabilir normal ifadeler, bazı tarayıcılarda standart olmayan bir ekti.

/ S / \u003d\u003d\u003d "işlev"; // Chrome 1-12 ECMAScript 5.1 typeof / s / \u003d\u003d\u003d "object" ile uyumsuz; // Firefox 5+ ECMAScript 5.1'e Uygun

Hatalar

ECMAScript 2015'ten önce, typeof ile birlikte verilen herhangi bir işlenen için bir dize döndürmesi her zaman garanti edildi. Bildirilmemiş tanımlayıcılarla bile, typeof "undefined" döndürür. Typeof kullanmak hiçbir zaman hata üretemez.

Ancak, blok-kapsamındaki let ve deyimler / const eklenmesi ile, bir komutta bildirilmeden önce let ve const değişkenlerinde typeof kullanılarak (veya bir sınıfta typeof kullanılarak) bir ReferenceError hatası gönderilir. Blok kapsamındaki değişkenler, blok başlangıcından başlatma işlemi yapılana kadar bir "geçici ölü bölge" içerisindedir, bu sırada erişilirse bir hata atar.

UndeclaredVariable \u003d\u003d\u003d "tanımsız"; typeof newLetVariable; // ReferenceError tür newConstVariable; // newClass ReferenceError türünde; // ReferenceError newLetVariable öğesine izin verir; const newConstVariable \u003d "merhaba"; sınıf newClass ();

İstisnalar

Geçerli tüm tarayıcılar, standart olmayan bir ana makine nesnesi belgesini ortaya çıkarır. All türünde undefined.

Document.all \u003d\u003d\u003d "tanımsız";

Spesifikasyon, standart olmayan egzotik nesneler için özel tür etiketlerine izin verse de, bu tür etiketlerin önceden tanımlanmış olanlardan farklı olmasını gerektirir. "Undefined" türüne sahip document.all örneği, web standartlarında orijinal ECMA JavaScript standardının "kasıtlı ihlali" olarak sınıflandırılmıştır.

Özellikler

şartname durum açıklama
ECMAScript Son Taslağı (ECMA-262)
taslak
ECMAScript 2015 (6. Baskı, ECMA-262)
  Bu spesifikasyondaki "Operatör türü" tanımı.
standart
ECMAScript 5.1 (ECMA-262)
  Bu spesifikasyondaki "Operatör türü" tanımı.
standart
ECMAScript 3. Baskı (ECMA-262)
  Bu spesifikasyondaki "Operatör türü" tanımı.
standart
ECMAScript 1. Baskı (ECMA-262)
  Bu spesifikasyondaki "Operatör türü" tanımı.
standart İlk tanım. JavaScript 1.1'de uygulandı.

Tarayıcı uyumluluğu

Bu sayfadaki uyumluluk tablosu yapılandırılmış verilerden oluşturulur. Verilere katkıda bulunmak istiyorsanız, lütfen https://github.com/mdn/browser-compat-data adresini ziyaret edin ve bize bir çekme isteği gönderin.

GitHub'daki uyumluluk verilerini güncelleme

MasaüstüseyyarSunucu
kromkenarFirefoxİnternet gezginioperasafariAndroid web görünümüAndroid için ChromeAndroid için FirefoxAndroid için OperaİOS'ta SafariSamsung İnternetnode.js
  typeofChrome Tam destek EvetEdge Tam destek 12Firefox Tam destek 1IE Tam destek EvetOpera Tam destek EvetSafari Tam destek EvetWebView Android Tam destek EvetChrome Android Tam destek EvetFirefox Android Tam destek 4Opera Android Tam destek EvetSafari iOS Tam destek EvetSamsung Internet Android Tam destek Evetnodejs tam destek evet

JavaScript   veya JS   (kısaltılmış) basit bir dil değildir ve acemi geliştiriciler hemen bunu öğrenmezler. İlk başta temelleri öğreniyorlar ve her şey renkli ve güzel görünüyor. Biraz daha derine inerken, JavaScript dizileri, nesneler, geri aramalar ve benzeri şeyler genellikle beynin görünmesini sağlar.

JavaScript'te, bir değişkenin türünü doğru kontrol etmek önemlidir. Bir değişkenin bir dizi mi yoksa nesne mi olduğunu bilmek istediğinizi varsayalım? Doğru nasıl kontrol edilir? Bu özel durumda, doğrulama sırasında hileler vardır ve bu kayıt onlar hakkında olacaktır. Hemen başlayalım.

Değişken Tipi Kontrolü

Örneğin, bir değişkenin nesne, dizi, dize veya sayı olup olmadığını kontrol etmeniz gerekir. Typeof bunun için kullanılabilir, ancak her zaman gerçeği vermez ve aşağıdaki örnekte nedenini göstereceğim.

Bu örneği typeof'in neden her zaman doğru seçim olmadığını göstermek için yazdım.

Var _comparison \u003d (dize: "dize", int: 99, kayan nokta: 13.555, nesne: (merhaba: "merhaba"), dizi: yeni Dizi (1, 2, 3)); // nesnenin anahtarları ile bir dizi döndürür var _objKeys \u003d Object.keys (_comparison); için (var i \u003d 0; i<= _objKeys.length - 1; i++) { // выведем в консоль тип каждой переменной console.log(typeof _comparson[_objKeys[i]]); }

Kod yürütme sonucu:

Dize numarası sayı nesnesi nesnesi

Değil mi? "Hayır, elbette." İki sorun var. Her biri ayrıntılı olarak tarif edilecek ve bir çözüm önerilecektir.

İlk sorun: kayan sayı, sayı olarak çıktı

Karşılaştırma.float bir sayı değildir ve sayı yerine bir kayan nokta (kayan nokta sayısı) olmalıdır.Bunu düzeltmek için, aşağıdaki kodda olduğu gibi bir çekle bir işlev oluşturabilirsiniz.

Var _floatNumber \u003d 9.22; var _notFloatNumber \u003d 9; console.log (isFloat (_floatNumber)); console.log (isFloat (_notFloatNumber)); console.log (isFloat ("")); işlevi isFloat (n) (dönüş Numarası (n) \u003d\u003d\u003d n && n% 1! \u003d\u003d 0;)

İsFloat () işlevi kayan nokta sayıları için tüm değerleri kontrol eder. İlk önce değişkenin eşit olup olmadığını kontrol edin n   sayı (Sayı (n) \u003d\u003d\u003d n) ve eğer öyleyse, geri kalanla bölünme için başka bir kontrol yapılır ve bir kalan varsa, bir Boolean ( gerçek   veya yanlış) sonuç (n% 1! \u003d\u003d 0).

Yukarıdaki örnekte, gerçek, yanlış   ve yanlış. İlk değer şamandırayazın, ikincisi değil - bu normal bir sayıdır ve sonuncusu yalnızca kurallara uymayan boş bir dizedir.

İkinci sorun: dizi bir nesne olarak tanımlandı

İlk örnekte, dizi bir nesne olarak görüntülenmiştir ve bu çok iyi değildir, çünkü bazen bu belirli türü ve daha fazlasını kullanmanız gerekir.

Bir dizi türü için bir değişkeni kontrol etmenin birkaç yolu vardır.

İlk seçenek (iyi bir seçenek). Verilerin instanceof () kullanarak diziye ait olup olmadığını kontrol ederiz.

Var veri \u003d yeni Dizi ("merhaba", "dünya"); var isArr \u003d Array'ın veri örneği;

İkinci seçenek (iyi bir seçenek). Array.isArray () yöntemi, değişkenin bir dizi olup olmamasına () bağlı olan bir Boolean değeri döndürür.

Var veri \u003d yeni Dizi ("merhaba", "dünya"); var isArr \u003d Array.isArray (veri);

Üçüncü seçenek (en iyi, ancak en uzun). Kolaylık olması için bu yöntemi bir işlev haline getirebilirsiniz. Object kullanarak yapıyoruz. Object.prototype.toString.call (data) sonucu eşit değilse, değişken bir dizi () değildir.

Var veri \u003d yeni Dizi ("merhaba", "dünya"); var isArr \u003d Object.prototype.toString.call (veri) \u003d\u003d ""; console.log (isArr);

Uygun bir işlev olarak son sonuç:

İşlev isArray (data) (dönüş Object.prototype.toString.call (data) \u003d\u003d "")

Artık isArray () işlevlerini çağırabilir ve bağımsız değişken olarak bir dizi veya başka bir şey ayarlayabilir ve sonucu görebilirsiniz.

sonsöz

Rekor, başlangıçta tasarlandığından oldukça büyük çıktı. Ancak ondan memnunum çünkü JavaScript'teki değişkenleri kontrol etmedeki zorlukları ve nasıl dolaşılacağını kısaca ve açıkça anlatıyor.

Herhangi bir sorunuz varsa, bunları bu girişe aşağıya yazın. Size yardımcı olmaktan memnuniyet duyarız.


üst