Konversi Tipe ECMAScript

Salah satu fitur penting paling utama dari semua bahasa pemrograman adalah kemampuan untuk melakukan konversi tipe.

ECMAScript menyediakan banyak method konversi tipe yang sederhana bagi para pengembang.

Sebagian besar tipe memiliki method konversi sederhana, serta beberapa method global untuk konversi yang kompleks. Dalam semua kasus, konversi tipe di ECMAScript adalah operasi tahap singkat.

Konversi ke string

Yang menarik tentang nilai asli Boolean, angka, dan string ECMAScript adalah mereka adalah objek palsu, yang berarti mereka sebenarnya memiliki properti dan method.

Contoh, untuk mendapatkan panjang string, dapat digunakan kode berikut:

var sColor = "red";
alert(sColor.length); // keluar "3"

Meskipun "red" adalah string tipe asli, ia tetap memiliki properti length untuk menyimpan ukuran string.

Secara keseluruhan, 3 tipe asli utama Boolean, angka, dan string memiliki method toString(), yang dapat mengubah nilai mereka ke string.

Pemberitahuan:Anda mungkin akan bertanya, "String punya method toString() juga, ini bukan berlebihan?" Ya, benar saja, namun ECMAScript mendefinisikan semua objek mempunyai method toString(), baik itu objek palsu maupun objek sebenarnya. Karena tipe String termasuk objek palsu, jadi pasti mempunyai method toString().

Boolean 类型的 toString() 方法只是输出 "true" 或 "false",结果由变量的值决定:

var bFound = false;
alert(bFound.toString());	//输出 "false"

Number 类型的 toString() 方法比较特殊,它有两种模式,即默认模式基模式。采用默认模式,toString() 方法只是用相应的字符串输出数字值(无论是整数、浮点数还是科学计数法),如下所示:

var iNum1 = 10;
var iNum2 = 10.0;
alert(iNum1.toString());	//输出 "10"
alert(iNum2.toString());	//输出 "10"

Keterangan:在默认模式中,无论最初采用什么表示法声明数字,Number 类型的 toString() 方法返回的都是数字的十进制表示。因此,以八进制或十六进制字面量形式声明的数字输出的都是十进制形式的。

采用 Number 类型的 toString() 方法的基模式,可以用不同的基数输出数字,例如二进制的基数是 2,八进制的基数是 8,十六进制的基数是 16。

基数这只是要转换成的基数的另一种加法而已,它是 toString() 方法的参数:

var iNum = 10;
alert(iNum.toString(2));	//输出 "1010"
alert(iNum.toString(8));	//输出 "12"
alert(iNum.toString(16));	//输出 "A"

在前面的示例中,以 3 种不同的形式输出了数字 10,即二进制形式、八进制形式和十六进制形式。HTML 使用十六进制表示每种颜色,在 HTML 中处理数字时这种功能非常有用。

Keterangan:对数字调用 toString(10) 与调用 toString() 相同,它们返回的都是该数字的十进制形式。

参阅:

Lihat Panduan Referensi JavaScript提供有关 toString() 方法的详细信息:

Konversi ke angka

ECMAScript menyediakan dua metode untuk mengubah nilai asli yang bukan angka ke angka, yaitu parseInt() dan parseFloat().

Seperti yang diharapkan, yang pertama mengubah nilai ke bilangan bulat, yang kedua mengubah nilai ke bilangan pecahan. Hanya untuk tipe String yang dipanggil method ini, mereka dapat berjalan dengan benar; untuk tipe lain, mengembalikan NaN.

parseInt()

Sebelum mengecek apakah string adalah nilai angka, parseInt() dan parseFloat() akan menganalisis string dengan seksama.

Metode parseInt() pertama-tama melihat karakter posisi 0, untuk mengecek apakah ia adalah angka yang berlaku; jika tidak, metode ini akan mengembalikan NaN dan berhenti melanjutkan operasi lain. Namun, jika karakter itu adalah angka yang berlaku, metode ini akan melihat karakter posisi 1, untuk test yang sama. Proses ini akan berlanjut sampai menemukan karakter yang tidak berlaku, dan saat itu parseInt() akan mengubah string sebelum karakter itu ke angka.

Contoh, jika mengubah string "12345red" ke bilangan bulat, metode parseInt() akan mengembalikan 12345, karena saat mengecek karakter r, proses pemeriksaan akan berhenti.

Nilai ekuivalen angka di string akan diubah ke angka dengan benar, seperti "0xA" akan diubah ke angka 10. Namun, string "22.5" akan diubah ke 22, karena titik desimal adalah karakter yang tidak berlaku untuk bilangan bulat.

Beberapa contoh seperti berikut:

var iNum1 = parseInt("12345red"); // mengembalikan 12345
var iNum1 = parseInt("0xA"); // mengembalikan 10
var iNum1 = parseInt("56.9"); // mengembalikan 56
var iNum1 = parseInt("red"); // mengembalikan NaN

Metode parseInt() juga memiliki mode basis, dapat mengubah string biner, oktal, hexadesimal atau basis lainnya ke bilangan bulat. Basis ditentukan oleh parameter kedua metode parseInt(), jadi untuk mengkonversi nilai hexadesimal, perlu memanggil metode parseInt() seperti berikut:

var iNum1 = parseInt("AF", 16); // mengembalikan 175

Tentu saja, untuk biner, oktal bahkan desimal (mode baku), dapat dipanggil seperti ini parseInt() metode:

var iNum1 = parseInt("10", 2); // mengembalikan 2
var iNum2 = parseInt("10", 8); // mengembalikan 8
var iNum3 = parseInt("10", 10); // mengembalikan 10

Jika angka desimal mengandung nol awal, lebih baik menggunakan dasar 10, agar tidak mendapatkan nilai oktal secara tak sengaja. Contohnya:

var iNum1 = parseInt("010"); // mengembalikan 8
var iNum2 = parseInt("010", 8); // mengembalikan 8
var iNum3 = parseInt("010", 10); // mengembalikan 10

Dalam kode ini, dua baris kode mengkonversi string "010" ke angka. Baris pertama menganggap string ini sebagai nilai oktal, mengkonversikan dengan cara yang sama seperti baris kedua (dideklarasikan dengan dasar 8). Baris terakhir mendeklarasikan dasar 10, jadi iNum3 akhirnya sama dengan 10.

Lihat

Lihat Panduan Referensi JavaScriptBerikut adalah informasi detil tentang metode parseInt():parseInt().

parseFloat()

Metode parseFloat() memiliki cara pengolahan yang serupa dengan metode parseInt(), yaitu memulai melihat setiap karakter dari posisi 0 sampai menemukan karakter yang tidak valid, kemudian mengkonversi string sebelum karakter ini ke bilangan bulat.

Namun, untuk metode ini, titik desimal yang muncul pertama adalah karakter yang valid. Jika ada dua titik desimal, titik desimal kedua akan dianggap tidak valid. parseFloat() akan mengkonversi karakter sebelum titik desimal ini ke angka. Ini berarti string "11.22.33" akan diinterpretasikan sebagai 11.22.

Salah satu perbedaan lain dalam penggunaan metode parseFloat() adalah bahwa string harus ditulis dalam bentuk desimal bilangan pecahan, bukannya oktal atau heksadesimal. Metode ini akan mengabaikan nol awal, jadi angka oktal 0102 akan diinterpretasikan sebagai 102. Untuk angka heksadesimal 0xA, metode ini akan mengembalikan NaN, karena x bukan karakter yang valid dalam bilangan pecahan. (Keterangan:Ditest, implementasi browser yang spesifik akan mengembalikan 0, bukannya NaN.)

Selain itu, metode parseFloat() tidak memiliki mode dasar.

Berikut adalah beberapa contoh penggunaan metode parseFloat():

var fNum1 = parseFloat("12345red"); // mengembalikan 12345
var fNum2 = parseFloat("0xA"); // mengembalikan NaN
var fNum3 = parseFloat("11.2"); // mengembalikan 11.2
var fNum4 = parseFloat("11.22.33"); // mengembalikan 11.22
var fNum5 = parseFloat("0102"); //kembalikan 102
var fNum1 = parseFloat("red"); //kembalikan NaN

Coba sendiri

Lihat

Lihat Panduan Referensi JavaScriptInformasi tentang metode parseFloat() yang disediakan:parseFloat().

Konversi tipe

Anda juga dapat menggunakanKonversi tipe (type casting)Untuk menangani tipe nilai yang akan diubah. Dengan konversi tipe, dapat diakses nilai spesifik, bahkan jika ia adalah tipe lain.

Catatan penulis:Cast memiliki arti "penggilingan", yang sesuai dengan arti "konversi paksa".

Tiga konversi tipe yang tersedia dalam ECMAScript adalah:

  • Boolean(value) - Mengkonversi nilai yang diberikan ke tipe Boolean;
  • Number(value) - Mengkonversi nilai yang diberikan ke angka (bisa berupa bilangan bulat atau bilangan pecahan);
  • String(value) - Mengkonversi nilai yang diberikan ke string;

Dengan menggunakan salah satu dari tiga fungsi ini untuk mengkonversi nilai, akan dibuat nilai baru yang menyimpan nilai yang diubah langsung dari nilai asli. Ini dapat menyebabkan dampak yang tak diharapkan.

Fungsi Boolean()

Ketika nilai yang akan diubah minimal memiliki satu karakter string, angka bukan 0, atau objek, fungsi Boolean() akan mengembalikan true. Jika nilai itu adalah string kosong, angka 0, undefined, atau null, ia akan mengembalikan false.

Dapat digunakan kode di bawah untuk menguji konversi tipe Boolean:

var b1 = Boolean(""); //false - string kosong
var b2 = Boolean("hello"); //true - string bukan kosong
var b1 = Boolean(50); //true - angka bukan nol
var b1 = Boolean(null); //false - null
var b1 = Boolean(0); //false - nol
var b1 = Boolean(new object()); //true - objek

Fungsi Number()

Konversi tipe yang disahkan oleh fungsi Number() mirip dengan metode parseInt() dan parseFloat(), tetapi ia mengkonversi nilai seluruhnya, bukannya nilai bagian.

Ingatlah, metode parseInt() dan parseFloat() hanya mengkonversi string sebelum karakter yang tidak sah pertama, jadi "1.2.3" akan diubah menjadi "1" dan "1.2".

Penggunaan Number() untuk konversi tipe, "1.2.3" akan kembali NaN, karena nilai string yang sepenuhnya tidak dapat diubah menjadi angka. Jika nilai string dapat diubah secara penuh, Number() akan mengevaluasi apakah metode parseInt() atau parseFloat() yang dipanggil.

Tabel di bawah ini menjelaskan apa yang terjadi saat memanggil metode Number() untuk nilai yang berbeda:

Penggunaan Hasil
Number(false) 0
Number(true) 1
Number(undefined) NaN
Number(null) 0
Number("1.2") 1.2
Number("12") 12
Number("1.2.3") NaN
Number(new object()) NaN
Number(50) 50

Fungsi String()

Metode konversi tipe terakhir String() yang paling sederhana, karena ia dapat mengubah setiap nilai menjadi string.

Untuk melaksanakan konversi tipe yang disengketakan ini, cukup panggil metode toString() yang diangkut sebagai parameter nilai, yaitu mengubah 12 menjadi "12", mengubah true menjadi "true", mengubah false menjadi "false", dan seterusnya.

Perbedaan utama antara konversi tipe yang disengketakan ke string dan pemanggilan metode toString() adalah, konversi tipe yang disengketakan untuk nilai null dan undefined dapat menghasilkan string tanpa memicu kesalahan:

var s1 = String(null);	//"null"
var oNull = null;
var s2 = oNull.toString();	//akan memicu kesalahan

Pada saat menangani bahasa yang lemah seperti ECMAScript, konversi tipe yang disengketakan sangat berguna, namun harus memastikan bahwa nilai yang digunakan benar.