Rumah  >  Artikel  >  hujung hadapan web  >  Pengenalan ringkas kepada penukaran jenis tersirat bagi kemahiran type_javascript data JavaScript

Pengenalan ringkas kepada penukaran jenis tersirat bagi kemahiran type_javascript data JavaScript

WBOY
WBOYasal
2016-05-16 15:22:561737semak imbas

Jenis data JavaScript dibahagikan kepada enam jenis, iaitu null, undefined, boolean, string, number dan object. objek ialah jenis rujukan, dan lima yang lain adalah jenis asas atau jenis primitif. Kita boleh menggunakan kaedah typeof untuk mencetak jenis sesuatu yang dimiliki. Untuk membandingkan pembolehubah jenis yang berbeza, anda mesti menukar jenis, yang dipanggil penukaran jenis juga dipanggil penukaran tersirat. Penukaran tersirat biasanya berlaku dengan penambahan operator, penolakan, pendaraban, pembahagian, sama dan kurang daripada, lebih besar daripada, dsb. .

typeof '11' //string    
typeof(11)  //number
'11' < 4   //false

Bab ini secara berasingan memperkenalkan penukaran jenis data tersirat dalam JavaScript. Pemahaman yang baik mengenainya boleh memudahkan banyak operasi dalam aplikasi praktikal.

Lihat contoh kod berikut:

var arr = [5];
console.log(arr+"");

Kod di atas ialah operasi untuk menukar tatasusunan secara tersirat kepada rentetan bukankah ia lebih mudah daripada kaedah berikut:

var arr = [5];
console.log(arr.toString());

Penukaran jenis data tersirat seperti di atas digunakan secara meluas dalam pengekodan sebenar.

1. Penukaran jenis data antara jenis nilai:

Untuk jenis data dalam JavaScript, sila rujuk bab "Penjelasan terperinci tentang jenis data JavaScript".

(1). Nombor dan rentetan menggunakan operator:

Jika anda menggunakan operator untuk mengendalikan nombor dan rentetan, nombor akan ditukar kepada rentetan dahulu, dan kemudian operasi penggabungan rentetan akan dilakukan:

var antzone = "antzone";
var num = 8;
console.log(antzone+num);

(2). Operasi Operator yang melibatkan nilai Boolean:

Jika terdapat jenis Boolean yang terlibat, nilai Boolean akan terlebih dahulu ditukar kepada nombor atau rentetan yang sepadan, dan kemudian sambungan rentetan yang sepadan atau operasi aritmetik akan dilakukan.

var bool = true;
var num = 8;
console.log(bool + num);

Kod di atas mula-mula menukar benar kepada nombor 1, dan kemudian melakukan penambahan aritmetik.

var bool = true;
var num = "8";
console.log(bool + num);

Nilai Boolean di atas akan ditukar kepada bentuk rentetan yang sepadan "benar", dan kemudian penggabungan rentetan dilakukan.

(3 Operasi tolak:

Jika operasi tolak dilakukan, kedua-dua operan akan ditukar kepada nombor dahulu, dan kemudian operasi aritmetik akan dilakukan:

var bool = true;
var num = "8";
console.log(bool - num);

true akan ditukar kepada nombor 1, rentetan "8" akan ditukar kepada nombor 8, dan kemudian operasi aritmetik akan dilakukan.

Perkara yang sama berlaku untuk penukaran pendaraban, pembahagian, lebih besar daripada, kurang daripada dan penolakan, jadi saya tidak akan memberikan contoh lagi.

(4).==Kendalian kesaksamaan:

undefined dan null adalah istimewa. Kedua-duanya menggunakan operator == untuk mengembalikan benar.

console.log(undefined==null);

Apabila membandingkan jenis nilai lain, operan akan ditukar kepada nombor

console.log("3"==3);

Kod di atas akan menukar rentetan "3" kepada nombor dan kemudian membandingkannya.

console.log("1"==true);

Kod di atas akan menukar "1" dan benar kepada nombor masing-masing, kemudian membandingkannya.

2. Tukar jenis rujukan kepada jenis nilai:

Menukar jenis rujukan (objek) kepada jenis nilai adalah lebih rumit Pengedarannya diperkenalkan di bawah.

Dua kaedah pewarisan objek boleh membantu kami merealisasikan fungsi penukaran daripada objek kepada jenis nilai:

(1).toString() kaedah.

Kaedah

(2).valueOf().

Biasanya, kami berpendapat bahawa untuk menukar objek kepada rentetan, anda perlu memanggil kaedah toString() dan untuk menukar objek kepada nombor, anda perlu memanggil kaedah valueOf() tetapi bukan itu mudah apabila ia benar-benar digunakan Lihat contoh kod berikut:

var obj = {
 webName: "脚本之家",
 url:"softwhy.com"
}
console.log(obj.toString());

Seperti yang dapat dilihat daripada kod di atas, kaedah toString() tidak menukar objek menjadi rentetan yang mencerminkan objek ini.

var arr = [1, 2, 3];
console.log(arr.valueOf());

Seperti yang dapat dilihat daripada kod di atas, kaedah valueOf() tidak menukar objek kepada nombor yang mencerminkan objek ini.

var arr = [1, 2, 3];
console.log(arr.toString());

数组对象的toString()方法能够将数组转换为能够反映此数组对象的字符串。

总结如下:

(1).有些对象只是简单继承了toString()或者valueOf()方法,比如第一个例子。
(2).有些对象则不但是继承了两个方法,而且还进行了重写。

所以有些对象的方法能够达成转换成字符串或者数字的目标,有些则不能。

调用toString()或者valueOf()将对象转换成字符串或者数字的规则如下:

调用toString()时,如果对象具有这个方法,则调用此方法;如果此方法返回一个值类型数据,那么就返回这个值类型数据,然后再根据所处的上下文环境进行相关数据类型转换。如果没有toString(),或者此方法返回值并不是一个值类型数据,那么就会调用valueOf()(如果此方法存在的话),如果valueOf()返回一个值类型数据,那么再根据所处的上下文环境进行相关的数据类型转换。

进一步说明:

(1).上面介绍了通常默认情况下valueOf()和toString()方法的作用(将对象转换为数字或者字符串),但是需要注意的是,这并不是硬性规定,也就是说并不是valueOf()方法必须要返回数字或者toString()方法必须要转换为字符串,比如简单继承的这两个方法就无法进行实现转换为数字和字符串的功能,再比如,我们可以自己称谢这两个方法,返回值也没有必要是数字或者字符串。

(2).还有需要特别注意的一点就是,很多朋友认为,转换为字符串首先要调用toString()方法, 其实这是错误的认识,我们应该这么理解,调用toString()方法可以转换为字符串,但不一定转换字符串就是首先调用toString()方法。

看如下代码实例:

var arr = [];
arr.valueOf = function () { return "1"; }
arr.toString = function () { return "2"; }
console.log(arr + "1");

上面的代码中,arr是要被转换为字符串的,但是很明显是调用的valueOf()方法,而没有调用toString()方法。有些朋友可能会有这样的质疑,难道[2]这样的数字转换成字符串"2",不是调用的toString()方法吗。

代码如下:

var arr = [2];
console.log(arr + "1");

其实过程是这样的,首先arr会首先调用valueOf()方法,但是数字的此方法是简单继承而来,并没有重写(当然这个重写不是我们实现),返回值是数组对象本身,并不是一个值类型,所以就转而调用toString()方法,于是就实现了转换为字符串的目的。

总结如下:

大多数对象隐式转换为值类型都是首先尝试调用valueOf()方法。但是Date对象是个例外,此对象的valueOf()和toString()方法都经过精心重写,默认是调用toString()方法,比如使用+运算符,如果在其他算数运算环境中,则会转而调用valueOf()方法。

代码实例如下:

var date = new Date();
console.log(date + "1");
console.log(date + 1);
console.log(date - 1);
console.log(date * 1);

以上内容是小编给大家介绍的JavaScript数据类型之隐式类型转换的全部内容,希望大家喜欢。

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn