首頁 web前端 js教程 簡單介紹JavaScript資料型別之隱式型別轉換_javascript技巧

簡單介紹JavaScript資料型別之隱式型別轉換_javascript技巧

May 16, 2016 pm 03:22 PM
隱式型別轉換

JavaScript的資料型別分為六種,分別為null,undefined,boolean,string,number,object。 object是引用型,其它的五種是基本型別或是原始型別。我們可以用typeof方法列印來某個是屬於哪個類型的。不同類型的變數比較要先轉類型,叫做型別轉換,型別轉換也叫隱式轉換。隱式轉換通常發生在運算子加減乘除,等於,還有小於,大於等。 。

typeof '11' //string    
typeof(11)  //number
'11' < 4   //false
登入後複製

本章節單獨介紹一下javascript中的隱式資料型別轉換,對於它的良好掌握,在實際應用能夠簡化很多操作。

看如下程式碼實例:

var arr = [5];
console.log(arr+"");
登入後複製

上面的程式碼就是將陣列隱式轉換成字串的一個操作,是不是要比下面的方式要簡單不少:

var arr = [5];
console.log(arr.toString());
登入後複製

像上面類似的隱式資料型別轉換在實際編碼上應用很多,下面進入正題。

一.值型之間的資料型別轉換:

javascript中的資料型態可以參考javascript資料型別詳解一章節。

(1).數字和字串使用+運算子:

數字和字串如果使用+運算子進行操作,那麼會將數字先轉換為字串,然後進行字串連接操作:

var antzone = "antzone";
var num = 8;
console.log(antzone+num);
登入後複製

(2).布林值參與的+運算子運算:

如果有布林型參與,那麼首先會將布林值轉換為對應的數字或字串,然後再進行對應的字串連接或算數運算。

var bool = true;
var num = 8;
console.log(bool + num);
登入後複製

上面的程式碼是先將true轉換成數字1,然後再進行算數加運算。

var bool = true;
var num = "8";
console.log(bool + num);
登入後複製

上面的布林值會轉換為對應的字串形式"true",然後再進行字串連接。

(3).減法操作:

如果進行減法操作,那麼兩個操作數都會先轉換成數字,然後在進行算數運算:

var bool = true;
var num = "8";
console.log(bool - num);
登入後複製

true會轉換為數字1,字串"8"會轉換為數字8,然後進行算術運算。

乘,除,大於,小於跟減的轉換也是一樣,就不再舉例子了。

(4).==等性運算:

undefined和null比較特殊,它們兩個使用==運算子回傳值是true。

console.log(undefined==null);
登入後複製

其他值類型進行比較的時候都會將運算數轉換為數字

console.log("3"==3);
登入後複製

上面的程式碼會將字串"3"轉換成數字,然後再進行比較。

console.log("1"==true);
登入後複製

上面的程式碼會分別將"1"和true轉換成數字,然後進行比較。

二.引用型別轉值型別:

引用型別(物件)轉換為值型別則複雜很多,以下分佈展開介紹。

物件繼承的兩個方法可以幫助我們實現物件到值類型的轉換功能:

(1).toString()方法。

(2).valueOf()方法。

通常情況下我們認為,將一個物件轉換為字串要呼叫toString()方法,轉換為數字要呼叫valueOf()方法,但是真正應用的時候並沒有這麼簡單,看如下程式碼實例:

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

從上面的程式碼可以看出,toString()方法並沒有將物件轉換為一個能夠反映此物件的字串。

var arr = [1, 2, 3];
console.log(arr.valueOf());
登入後複製

從上面的程式碼可以看出,valueOf()方法並沒有將物件轉換為能夠反映此物件的一個數字。

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数据类型之隐式类型转换的全部内容,希望大家喜欢。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1317
25
PHP教程
1268
29
C# 教程
1242
24
C語言中的隱式型別轉換和顯式型別轉換是什麼? C語言中的隱式型別轉換和顯式型別轉換是什麼? Sep 08, 2023 pm 10:13 PM

將一種資料型別轉換為另一種資料型別稱為型別轉換。隱式類型轉換明確型別轉換隱式型別轉換當運算元具有不同資料型別時,編譯器提供隱式型別轉換。它是由編譯器透過將較小的資料類型轉換為較大的資料類型自動完成的。 inti,x;floatf;doubled;longintl;這裡,上面的表達式最終計算結果為「double」值。範例以下是隱式型別轉換的範例-intx;for(x=97;x<=122;x++){  printf("%c",x);/*Im

mysql存在哪些隱式類型轉換 mysql存在哪些隱式類型轉換 Nov 14, 2023 am 11:28 AM

mysql存在的隱式型別轉換有字串到數值型別、日期和時間型別、浮點數和整數型別、NULL值等。詳細介紹:1、字串到數值類型的隱式類型轉換,當一個字串和一個數值類型的值進行比較或計算時,MySQL會將字串轉換為數值類型;2、日期和時間類型的隱式類型轉換,在MySQL中,日期和時間類型也可以與其他資料類型進行隱式類型轉換;3、浮點數和整數類型的隱式類型轉換等等。

golang函數的型別轉換 golang函數的型別轉換 Apr 19, 2024 pm 05:33 PM

函數中類型轉換允許將一種類型的資料轉換為另一種類型,從而擴展函數的功能。使用語法:type_name:=variable.(type)。例如,可使用strconv.Atoi函數將字串轉換為數字,並處理轉換失敗的錯誤。

C++ 函式預設參數與可變參數的優缺點比較 C++ 函式預設參數與可變參數的優缺點比較 Apr 21, 2024 am 10:21 AM

C++函數中預設參數的優點包括簡化呼叫、增強可讀性、避免錯誤。缺點是限制靈活性、命名限制。可變參數的優點包括無限彈性、動態綁定。缺點包括複雜性更高、隱式型別轉換、除錯困難。

隱式型別轉換:型別的不同變體及其在程式設計中的應用探究 隱式型別轉換:型別的不同變體及其在程式設計中的應用探究 Jan 13, 2024 pm 02:54 PM

探索隱式類型轉換的不同類型及其在程式設計中的作用引言:在程式設計中,我們經常需要處理不同類型的資料。有時候,我們需要將一種資料類型轉換為另一種類型以便進行特定操作或滿足特定要求。在這個過程中,隱式型別轉換是一個非常重要的概念。隱式類型轉換指的是不需要明確指定轉換類型的情況下,程式語言會自動進行資料類型轉換的過程。本文將探討隱式類型轉換的不同類型及其在程式設計中的作用,

mysql索引失效的幾種情況 mysql索引失效的幾種情況 Feb 21, 2024 pm 04:23 PM

常見情況:1、使用函數或運算;2、隱式類型轉換;3、使用不等於(!=或<>);4、使用LIKE操作符,並以通配符開頭;5、OR條件;6、NULL值;7、索引選擇性低;8、複合索引的最左前綴原則;9、優化器決策;10、FORCE INDEX和IGNORE INDEX。

c語言中int和float有什麼差別 c語言中int和float有什麼差別 Apr 29, 2024 pm 10:12 PM

C 語言中 int 和 float 變數的差異在於:型別不同:int 用來儲存整數,而 float 用來儲存小數。儲存大小:int 通常佔用 4 個位元組,而 float 也佔用 4 個位元組。精確度:int 表示精確的整數,而 float 的精確度有限。範圍:int 的範圍通常為 -2^31 到 2^31-1,而 float 的範圍較寬。運算:int 和 float 可以進行算術運算和比較,但結果可能受到精確度限制的影響。類型轉換:int 和 float 之間可以進行明確或隱式型別轉換。

c#和c語言什麼關係 c#和c語言什麼關係 Apr 04, 2024 pm 12:03 PM

C# 和 C 語言之間存在密切關係,包括語法相似性、物件導向程式支援、垃圾回收、類型安全性和平台差異。 C# 繼承了 C 語言的語法和物件導向程式設計的基礎,並對其進行了擴展,包括垃圾回收、類型安全和平台特定性等特性。

See all articles