Son Güncelleme: 1.11.2015

Genellikle bir veriyi diğerine dönüştürme ihtiyacı vardır. Örneğin:

varnumber1 = "46"; varnumber2 = "4"; varresult = sayı1 + sayı2; konsol günlüğü(sonuç); ///464

Her iki değişken de dizeleri, daha özel olarak sayıların dize temsillerini temsil eder. Ve sonuç olarak, 50 sayısını değil, 464 dizisini elde edeceğiz. Ancak, genel olarak, normal sayılarla olduğu gibi, toplanıp, çıkarılabilseler iyi olurdu.

Bu durumda dönüştürme işlemlerini kullanabiliriz. İşlev, bir dizeyi sayıya dönüştürmek için kullanılır. ayrıştırma ():

varnumber1 = "46"; varnumber2 = "4"; var sonuç = ayrıştırma(sayı1) + ayrıştırma(sayı2); konsol günlüğü(sonuç); // elli

Dizeleri dönüştürmek için kesirli sayılar uygulamalı fonksiyon parseFloat():

varnumber1 = "46.07"; varnumber2 = "4.98"; var sonuç = parseFloat(sayı1) + parseFloat(sayı2); konsol günlüğü(sonuç); //51.05

Bu durumda, dize karışık içeriğe sahip olabilir, örneğin "123hello", yani bu durumda sayılar var, ancak sıradan karakterler de var. Ancak parseInt() yöntemi yine de dönüştürmeyi deneyecektir:

Varnum1 = "123 merhaba"; varnum2 = ayrıştırma(num1); konsol günlüğü(sayı2); // 123

Yöntem dönüştürülemezse, dizenin bir sayıyı temsil etmediğini ve dönüştürülemeyeceğini belirten NaN (Sayı Değil) değerini döndürür.

Özel işlevli isNaN() bir dizenin bir sayıyı temsil edip etmediğini kontrol edebilirsiniz. Dize bir sayı değilse, işlev true, sayıysa false döndürür:

Var num1 = "javascript"; varnum2 = "22"; varresult = isNaN(num1); konsol günlüğü(sonuç); // true - num1 bir sayı değil sonuç = isNaN(num2); konsol günlüğü(sonuç); // false - num2 bir sayıdır

Yukarıda, dizelerin sayılara çevrilmesini düşündük. ondalık sistem. Ancak sayıları herhangi bir sisteme çevirebiliriz. Varsayılan olarak, JavaScript yorumlayıcısı, dizeyi hangi sayı sistemine dönüştürmek istediğimizi tahmin eder (genellikle ondalık sistem seçilir). Ancak ikinci parametreyi, belirli bir sistemde bir dizgiyi sayıya dönüştürmek istediğimizi açıkça belirtmek için kullanabiliriz. Örneğin, bir sayıya dönüştürme İkili sistem:

Varnum1 = "110"; varnum2 = ayrıştırma(sayı1, 2); konsol günlüğü(sayı2); // 6

Sonuç 6 olacaktır, çünkü ikilikteki 110, ondalıktaki 6 sayısıdır.

şimdi yazalım küçük program değişkenlerle işlemleri kullandığımız:

JavaScript

İstem() işlevinin yardımıyla, tarayıcıda sizden bir değer girmenizi isteyen bir iletişim kutusu görüntülenir. Bu işlevin ikinci argümanı, varsayılan olarak kullanılacak değeri belirtir.

Ancak, istem() işlevi bir dize döndürür. Bu nedenle, onunla işlem yapabilmek için bu dizeyi bir sayıya dönüştürmemiz gerekiyor.

Sayfayı tarayıcıda açtıktan sonra, para yatırma miktarını girmek için bir davetiye göreceğiz:

Ardından, yüzdeyi girmek için benzer bir mesaj görüntülenecektir. Ve sonunda, program verileri alacak, sayılara dönüştürecek ve hesaplamayı yapacaktır.

JavaScript, dinamik veri yazma özelliğine sahip bir dildir. Bu, aynı değişkene değerler yazabileceğiniz anlamına gelir. çeşitli tipler, değişkenin türü de değişecektir. Bu davranış genellikle değişkenlerin farklı davranışlarını unutmayı mümkün kılar. farklı tip, ancak yine de bu özelliği hatırlamak gereklidir. Bunu aşağıdaki örnekte gösterelim.

konsol.log(toplam(1, 2)); // 3 (burada her şey yolunda) console.log(sum(1, "2")); // 12 (burada çok fazla değil)

Örnekten de görebileceğiniz gibi, fonksiyon toplam argümanlarından en az biri sayı değilse yanlış davranır. Gerçek şu ki, bir dizgeye bir sayı "eklerken", sayı bir dizgeye dönüştürülür ve ikinci işlenenle birleştirilir (yapıştırılır).

Bu tür komplikasyonları önlemek için, komut dosyası yürütme sırasında bir değişkenin türünü öğrenebilir ve davranışını düzeltebilir veya değişken türlerini dikkatlice izleyebilirsiniz.

typeof operatörü

Bu tekli operatör, işlenen olarak kesinlikle herhangi bir değeri alır ve türünü bir dize değişkeninde döndürür.

JavaScript aşağıdaki veri türlerine sahiptir:

// 1.) nesne konsolu log (typeof ( ) ) ; // nesne var p = ( x: 1 , y: 3 ) ; konsol.log (typeof p) ; // nesne // 2.) işlev işlevi sayHello() ( konsol.log ("Merhaba!" ) ; ) konsol.log (sayHello türü) ; // fonksiyon // 3.) string konsol.log ("JavaScript" tipi ) ; // string // 4.) sayı konsol.log (typeof 3.1415 ) ; // sayı // 5.) boolean console.log (typeof true ) ; // boolean // 6.) undefined var notExistsOne; konsol.log (typeof notExistsOne); // tanımsız konsol.log (typeof notExistsTwo) ; // Tanımsız

// 1.) nesne konsol.log(typeof()); // nesne var p = (x: 1, y: 3); konsol.log(typeofp); // nesne // 2.) fonksiyon sayHello() ( console.log("Merhaba!"); ) console.log(typeof sayHello); // fonksiyon // 3.) string console.log(typeof "JavaScript"); // string // 4.) sayı konsol.log(typeof 3.1415); // sayı // 5.) boolean console.log(typeof true); // boolean // 6.) undefined var notExistsOne; konsol.log(typeof notExistsOne); // undefined console.log(typeof notExistsTwo); // Tanımsız

Bunu not et Tanımsız aynı zamanda tek bir değerden oluşan bir veri türüdür.

Oyuncu kadrosu

Programlamada tip dökümü, bir tipteki bir değişkenin değerinin başka bir tipteki bir değere dönüştürülmesidir.
Genellikle bu dönüşüm programcının kontrolü olmadan gerçekleşir. Bu, fonksiyon ile örnekte görülebilir. toplam. Orijinal türdeki bir değişken üzerinde bir işlem gerçekleştirmenin sonucu net olmadığında bir tür değişikliği meydana gelir. Örneğin, bir sayı ile bir dizi eklemenin sonucunun tam olarak ne olacağını söylemek imkansızdır, ancak iki sayı toplama işlemi açıktır ve bu durumda sayıyı bir dizeye indirgemek mantıklıdır.

Dizeyi sayıya dönüştür

Bazen programcının kendisi, değişkene bazı işlemler uygulayarak bir değişkenin türünü değiştirebilir. Örneğin, bir dizedeki artırma veya azaltma işlemleri onu bir sayıya dönüştürür.

var c = "sayı değil"; ++c; konsol.log(c tipi); // NaN

Bir dizeyi sayıya dönüştürmek için bu yönteme başvurmanız gerekmediğini, okunabilirliğinin zayıf olması ve açık olmaması nedeniyle belirtmekte fayda var. Bu görev için js'de yerleşik işlevler vardır. ayrıştırma ve ayrıştırmakFloat. Bir sayıya dönüştürmek için ilk argüman olarak bir dize alırlar ve isteğe bağlı ikinci argüman olarak, ilk argüman olarak iletilen dizedeki sayıyı içeren sayı sisteminin tabanını alırlar. İkinci argüman belirtilmezse, dizgenin ondalık sayı sisteminde bir sayı içerdiği kabul edilecektir.

İşlev ayrıştırma bir dizeyi tam sayıya dönüştürmek için kullanılır ve işlev ayrıştırmakFloat kesirli dönüştürmek için.

var a = parseInt("10"); konsol.log ([ "a = " , a, "; typeof a:" , typeof a] .join (" " ) ) ; // a = 10 ; typeof a: sayı var pi = parseInt("3.1415" ) ; konsol.log("pi = " + pi) ; // pi = 3 pi = parseFloat("3.1415" ) ; konsol.log("pi = " + pi) ; // pi = 3.1415

var a = parseInt("10"); konsol.log(["a = ", a, "; typeof a:", typeof a].join(" ")); // a = 10 ; typeof a: sayı var pi = parseInt("3.1415"); konsol.log("pi = " + pi); // pi = 3 pi = parseFloat("3.1415"); konsol.log("pi = " + pi); // pi = 3.1415

Dizenin onaltılık, sekizlik veya üstel dahil olmak üzere herhangi bir hazır bilgi sayısal değeri içerebileceğini unutmayın.

a = ayrıştırma("010"); konsol.log("a = " + a) ; // a = 8 a = parseInt("0xAA" ) ; konsol.log("a = " + a) ; // a = 170 a = parseFloat("1e-10" ) ; konsol.log("a = " + a) ; // a = 1e-10 (1e-10 = 1 * 10^-10 = 0.0000000001)

a = ayrıştırma("010"); konsol.log("a = " + a); // a = 8 a = parseInt("0xAA"); konsol.log("a = " + a); // a = 170 a = parseFloat("1e-10"); konsol.log("a = " + a); // a = 1e-10 (1e-10 = 1 * 10^-10 = 0.0000000001)

Fonksiyonların ikinci parametresi olarak ayrıştırma ve ayrıştırmakFloat sayı sisteminin tabanını belirleyebilirsiniz.

a = ayrıştırma("10" , 8 ) ; konsol.log("a = " + a) ; // a = 8 a = parseInt("010" , 10 ) ; konsol.log("a = " + a) ; // a = 10 a = parseInt("ff" , 16 ) ; konsol.log("a = " + a) ; // bir = 255

a = ayrıştırma("10", 8); konsol.log("a = " + a); // a = 8 a = parseInt("010", 10); konsol.log("a = " + a); // a = 10 a = parseInt("ff", 16); konsol.log("a = " + a); // bir = 255

Değer dizedeyse, işlevlerin ayrıştırma ve ayrıştırmakFloat ilk parametre olarak alın, sayısal bir değişmez sayı değildir, o zaman bu işlevlerin yürütülmesinin sonucu değer olacaktır. NaN.

a = parseInt("sayı değil"); konsol.log("a = " + a) ; // a = NaN a = parseFloat("sayı değil" ) ; konsol.log("a = " + a) ; // a = NaN

a = parseInt("sayı değil"); konsol.log("a = " + a); // a = NaN a = parseFloat("sayı değil"); konsol.log("a = " + a); // a = NaN

Dize dönüştürme

AT JavaScript değeri herhangi bir tür bir dizgeye dönüştürülebilir. Yukarıda, bir dize bir sayı ile birleştirildiğinde, sayının bir dizeye indirgendiği ve ancak o zaman birleştirmenin gerçekleştiği söylenmiştir. Bu, herhangi bir değer türü ile olur.

var str = "Nesne:" + ( ) ; konsol günlüğü (str) ; // Nesne: str = "Dizi:" + [ 1 , 2 , 3 ] ; konsol günlüğü (str) ; // Dizi: 1,2,3 işlev toplam(a, b) ( dönüş a + b; ) str = "İşlev: " + toplam; konsol günlüğü (str) ; /* Fonksiyon: fonksiyon toplamı(a, b) ( döndür a + b; ) */

var str = "Nesne: " + (); konsol günlüğü(str); // Nesne: str = "Dizi: " + ; konsol günlüğü(str); // Dizi: 1,2,3 işlev toplam(a, b) ( dönüş a + b; ) str = "İşlev: " + toplam; konsol günlüğü(str); /* Fonksiyon: fonksiyon toplamı(a, b) ( döndür a + b; ) */

Aslında, bir nesneyi bir dizgeye aktarırken, yöntem dolaylı olarak çağrılır. toString, ayrıca açıkça çağrılabilir.

var p = ( x: 2 , y: 4 ), str; str = p.toString(); konsol.log (typeof str) ; // string konsol.log (str) ; // str = [ 1 , 2 , 3 ] .toString(); konsol.log (typeof str) ; // string konsol.log (str) ; // 1,2,3

var p = (x: 2, y: 4), str; str = p.toString(); konsol.log(typeofstr); // string konsol.log(str); // str = .toString(); konsol.log(typeofstr); // string konsol.log(str); // 1,2,3

Sayısal Dönüşüm

Bir sayıya dönüştürme, yürütülürken gerçekleşir matematiksel işlemler ve tip döküm (==, !=) ile bir karşılaştırma işlemi yaparken, değer yanlış ve boş bir dizi, 0 türünde bir değere dönüştürülür sayı.

var a = doğru + doğru + doğru; // 1 + 1 + 1 konsol.log(a); // 3

Boş olmayan bir dizi, nesne ve işlev, aritmetik ifadelerde kullanıldığında bir dizgeye dönüştürülür.

var dizi = [ 1 , 2 , 3 ] ; konsol.log (dizi + 4 ); // 1,2,34 fonksiyon toplam(a, b) ( dönüş a + b; ) konsol.log (toplam + 5 ) ; // fonksiyon toplamı(a, b)(dönüş a + b;)5

var arr = ; konsol.log(dizi + 4); // 1,2,34 function sum(a, b)(return a + b;) console.log(sum + 5); // fonksiyon toplamı(a, b)(dönüş a + b;)5

Gördüğünüz gibi, js'de örtük tür dönüştürme her zaman açık olmaktan uzaktır, bu nedenle açık tür dönüştürme için işlevler kullanarak bundan kaçınmalısınız, örneğin ayrıştırma, ayrıştırmakFloat ve toString.

Bu kadar. Her zaman olduğu gibi, sana iyi şanslar!

Javascript'te dizeyi sayıya dönüştürmenin iki ana yolu vardır. Bir yol, onu ayrıştırmak ve başka bir yol, türünü bir sayıya değiştirmektir. Diğer cevaplardaki tüm püf noktaları (örneğin, tekli artı), dize türünün sayıya dolaylı olarak zorlanmasını ima eder. Aynı şeyi Sayı işleviyle de yapabilirsiniz.

Sözdizimsel

Var parsed = parseInt("97", 10);

ParseInt ve parseFloat, dizeleri sayılara ayrıştırmak için kullanılan iki işlevdir. Ayrıştırma, tanımadığı bir karaktere çarptığında sessizce duracaktır, bu da "92px" gibi dizeleri ayrıştırmak için yararlı olabilir, ancak aynı zamanda hatalı girdide herhangi bir hata vermeyeceği için biraz tehlikelidir, bunun yerine "NaN döndürürsünüz" dize bir sayı ile başlamazsa. Dizenin başındaki boşluk yok sayılır. Burada, istediğiniz başka bir şeyi yapan ve işlerin ters gittiğine dair herhangi bir belirti vermeyen bir örnek verilmiştir:

Var widgetsSold = parseInt("97,800", 10); // widgetSold artık 97

İkinci argüman olarak her zaman ondalık belirtmek iyi bir uygulamadır. Eski tarayıcılarda, bir dize 0'dan başlarsa, bir sayı tabanı değeri belirtilmedikçe sekizli olarak yorumlanır ve bu birçok insanı şaşırtmıştır. Bir taban değeri belirtilmedikçe dize 0x ile başlarsa onaltılı başlatma davranışı tetiklenir. 0xff. Standart aslında ecmascript 5 ile değişti, bu yüzden modern tarayıcılar neden belirtilmemişse, baştaki 0 ​​olduğunda artık sekizli çalıştırmaz. parseInt, 36 tabanına kadar olan radikalleri anlar, bu durumda hem büyük hem de küçük harfler eşdeğer olarak kabul edilir.

Dize türünü sayı olarak değiştirin

Yukarıda bahsedilen ve ParseInt kullanmayan diğer tüm hileler, bir dizeyi bir sayıya dolaylı olarak zorlamayı içerir. açıkça yapmayı tercih ederim

Var döküm = Sayı("97");

Bu, ayrıştırma yöntemlerinden farklıdır (yine de boşlukları yok sayar). Daha katıdır: NaN döndürdüğünden daha fazla dizenin tamamını anlamıyorsa, bu nedenle onu 97px gibi dizeler için kullanamazsınız. Number sarmalayıcı nesnesi değil, ilkel bir sayı istediğiniz için, Number işlevinin önüne new ile gelmediğinizden emin olun.

Açıkçası bir sayıya dönüştürmek, bir tamsayı yerine bir kayan nokta olabilen bir değer verir, bu nedenle bir tamsayı istiyorsanız, onu değiştirmeniz gerekir. Bunu yapmanın birkaç yolu vardır:

Varrounded = Math.floor(Number("97.654")); // diğer seçenekler Math.ceil, Math.round var sabit = Number("97.654").toFixed(0); // kesilmek yerine yuvarlanır var bitwised = Number("97.654")|0; // büyük sayılar için kullanmayın

Herhangi bir bitsel operatör (burada bir bitsel veya yaptım, ancak önceki yanıtta veya Bitshift'te olduğu gibi çift olumsuzlama da yapabilirsiniz) değeri 32 bitlik bir tam sayıya dönüştürür ve çoğu işaretli bir tam sayıya dönüştürür. Lütfen unutmayın ki bu büyük tamsayıları aramanızı istemeyecek. Bir tamsayı 32 bitte gösterilemiyorsa tamamlanacaktır.

~~"3000000000.654" === -1294967296 // Bu, Number("3000000000.654")|0 "3000000000.654" >>> 0 === 3000000000 // işaretsiz sağa kaydırma size fazladan bir "300000000000.654" bit verir > >> 0 === 3647256576 // ama yine de daha büyük sayılarla başarısız oluyor

Büyük sayılarla doğru çalışmak için yuvarlama yöntemlerini kullanmanız gerekir.

Math.floor("3000000000.654") === 3000000000 // Bu Math.floor(Number("3000000000.654") ile aynıdır)

Tüm bu yöntemlerin üstel gösterimi anladığını unutmayın, bu nedenle 2e2 200 , NaN değil. Ayrıca, ayrıştırma yöntemleri anlamazken Number "Sonsuz"u anlar.

Gelenek

Bu yöntemlerden herhangi birinin tam olarak istediğinizi yapması olası değildir. Örneğin, genellikle bir ayrıştırma hatası hatası istiyorum ve Infinity desteğine, üslere veya baştaki boşluklara ihtiyacım yok. Kullanımınıza bağlı olarak, bazen özel bir dönüştürme işlevi yazmak mantıklıdır.

Her zaman sayı çıktısının veya ayrıştırma yöntemlerinden birinin beklenen sayı türü olduğunu kontrol edin. Sayının NaN olmadığından emin olmak için neredeyse kesinlikle isNaN kullanmak isteyeceksiniz (genellikle ayrıştırmanın başarısız olup olmadığını bilmenin tek yolu).

İfadede ne tür bir değişken kullanıldığı önemli değildir. İfade matematiksel ise, tüm değişkenleri otomatik olarak sayısal olarak yorumlanacaktır. Dizeler işlenirse, ifadenin tüm "katılımcıları" dize olarak kabul edilir. Ancak, JavaScript "dizesini sayıya" dönüştürme görevi çok daha geniş bir bağlamda mevcuttur.

Dizeleri Sayılara Dönüştürmek için JavaScript Yöntemleri

Dizeleri sayılara dönüştürme yöntemlerinin cephaneliği büyük değil, ancak hepsinde yeterli. basit vakalar. Burada JavaScript (özellikle yeni başlayanlar için), pratik örneklerle basitten karmaşığa giden yoldur.

İlgileneceksiniz:

Örnek, dört farklı diziyi açıklamaktadır. İlk çıkış bloğunda, her birinin türü değişken fonksiyon typeof, dize olarak tanımlanır. Her dize daha sonra çok basit bir şekilde bir sayıya dönüştürülür. İkinci çıkış bloğunda, dönüşümden sonra değişkenlerdeki değişiklikleri görebilirsiniz, türleri bir sayı haline geldi. JavaScript parseFloat dönüştürme örneği özellikle açıklayıcıdır: "12e+3" idi, şimdi "12000".

Bir dizeyi sayıya dönüştürürken yapılan değişiklikler önemli olabilir! Ancak yalnızca ilk karakterler önemlidir: sayısal olmalıdırlar. Sayısal karakter yoksa sonuç NaN olur.

Sayı "olan" bir dizgenin ters çevrilmesi her zaman aynı dizge değildir. Bu an, sayısal bilgilerin girilmesinin doğruluğunu kontrol etmek için kullanılabilir.