溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Javascript基本的數(shù)據(jù)類型以及對(duì)象類型有哪些

發(fā)布時(shí)間:2021-09-30 16:27:06 來源:億速云 閱讀:109 作者:柒染 欄目:開發(fā)技術(shù)

Javascript基本的數(shù)據(jù)類型以及對(duì)象類型有哪些,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

  有程序設(shè)計(jì)經(jīng)驗(yàn)的讀者肯定知道,在C或者Java這樣的語言中,數(shù)據(jù)是有類型的,比如用以表示用戶名的屬性是字符串,而一個(gè)雇員的年齡則是一個(gè)數(shù)字,表示UI上的一個(gè)開關(guān)按鈕的數(shù)據(jù)模型則為布爾值等等,對(duì)數(shù)字可能還可以細(xì)分為浮點(diǎn)數(shù),整型數(shù),整型數(shù)又可能分為長(zhǎng)整型和短整型,總而言之,它們都表示語言中的數(shù)據(jù)的值的類型。

  Javascript基本數(shù)據(jù)類型有哪些

  在JavaScript中,包含三種基本的數(shù)據(jù)類型,字符串(String),數(shù)值(Number),布爾值(boolean),下面是一些簡(jiǎn)單的例子:

  var str="Hello,world";//字符串

  var i=10;//整型數(shù)

  var f=2.3;//浮點(diǎn)數(shù)

  var b=true;//布爾值

  我們可以分別查看變量的值及變量的類型:

  print(str);

  print(i);

  print(f);

  print(b);

  print(typeof str);

  print(typeof i);

  print(typeof f);

  print(typeof b);

  注意,在此處使用的print()函數(shù)為rhino解釋器的頂層對(duì)象的方法,可以用來打印字符串,通常情況下,在客戶端,程序員多使用alert()進(jìn)行類似的動(dòng)作,alert()是瀏覽器中JavaScript解釋器的頂層對(duì)象(window)的一個(gè)方法。

  Hello,world

  10

  2.3

  true

  string

  number

  number

  Boolean

  在JavaScript中,所有的數(shù)字,不論是整型浮點(diǎn),都屬于“數(shù)字”基本類型。typeof是一個(gè)一元的操作符,在本章的另外一個(gè)小節(jié)會(huì)專門講到。

  Javascript對(duì)象類型有哪些

  這里提到的對(duì)象不是對(duì)象本身,而是指一種類型,我們?cè)诘谌聲?huì)對(duì)對(duì)象進(jìn)行詳細(xì)的討論,此處的對(duì)象包括,對(duì)象(屬性的集合,即鍵值的散列表),數(shù)組(有序的列表),函數(shù)(包含可執(zhí)行的代碼)。

  對(duì)象類型是一種復(fù)合的數(shù)據(jù)類型,其基本元素由基本數(shù)據(jù)類型組成,當(dāng)然不限于基本類型,比如對(duì)象類型中的值可以是其他的對(duì)象類型實(shí)例,我們通過例子來說明:

  var str="Hello,world";

  var obj=new Object();

  obj.str=str;

  obj.num=2.3;

  var array=new Array("foo","bar","zoo");

  var func=function(){

  print("I am a function here");

  }

  可以看到,對(duì)象具有屬性,如obj.str,obj.num,這些屬性的值可以是基本類型,事實(shí)上還可以更復(fù)雜,我們來看看他們的類型:

  print(typeof obj);

  print(typeof array);

  print(typeof func);

  //將打印出

  object

  object

  function

  讀者可能會(huì)對(duì)print(typeof array)打印出object感到奇怪,事實(shí)上,對(duì)象和數(shù)組的界限并不那么明顯(事實(shí)上它們是屬于同一類型的),但是他們的行為卻非常不同,本書的后續(xù)章節(jié)將兩個(gè)重要的數(shù)據(jù)類型做了分別介紹。

  兩者之間的轉(zhuǎn)換

  類似與Java中基本數(shù)據(jù)類型的自動(dòng)裝箱拆箱,JavaScript也有類似的動(dòng)作,基本數(shù)據(jù)類型在做一些運(yùn)算時(shí),會(huì)臨時(shí)包裝一個(gè)對(duì)象,做完運(yùn)算后,又自動(dòng)釋放該對(duì)象。我們可以通過幾個(gè)例子來說明:

  var str="JavaScript Kernal";

  print(str.length);//打印17

  str為一個(gè)字符串,通過typeof可知其type為”string”,而:

  var str2=new String("JavaScript Kernal");

  print(typeof str2);

  可知,str2的type為”object”,即這兩者并不相同,那么為什么可以使用str.length來的到str的長(zhǎng)度呢?事實(shí)上,當(dāng)使用str.length時(shí),JavaScript會(huì)自動(dòng)包裝一個(gè)臨時(shí)的String對(duì)象,內(nèi)容為str的內(nèi)容,然后獲取該對(duì)象的length屬性,最后,這個(gè)臨時(shí)的對(duì)象將被釋放。

  而將對(duì)象轉(zhuǎn)換為基本類型則是通過這樣的方式:通過調(diào)用對(duì)象的valueOf()方法來取得對(duì)象的值,如果和上下文的類型匹配,則使用該值。如果valueOf取不到值的話,則需要調(diào)用對(duì)象的toString()方法,而如果上下文為數(shù)值型,則又需要將此字符串轉(zhuǎn)換為數(shù)值。

  由于JavaScript是弱類型的,所以JavaScript引擎需要根據(jù)上下文來“猜測(cè)”對(duì)象的類型,這就使得JavaScript的效率比編譯型的語言要差一些。

  valueOf()的作用是,將一個(gè)對(duì)象的值轉(zhuǎn)換成一種合乎上下文需求的基本類型,toString()則名副其實(shí),可以打印出對(duì)象對(duì)應(yīng)的字符串,當(dāng)然前提是你已經(jīng)“重載”了Object的toString()方法。

  事實(shí)上,這種轉(zhuǎn)換規(guī)則會(huì)導(dǎo)致很多的問題,比如,所有的非空對(duì)象,在布爾值環(huán)境下,都會(huì)被轉(zhuǎn)成true,比如:

  function convertTest(){

  if(new Boolean(false)&&new Object()&&new String("")&&new Array()){

  print("convert to boolean")

  }

  }

  convertTest();//convert to Boolean

  初學(xué)者容易被JavaScript中的類型轉(zhuǎn)換規(guī)則搞暈掉,很多情況下會(huì)覺得那種寫法看著非常別扭,其實(shí)只需要掌握了規(guī)則,這些古怪的寫法會(huì)大大的提高代碼的性能,我們通過例子來學(xué)習(xí)這些規(guī)則:

  var x=3;

  var y=x+"2";//=>32

  var z=x+2;//=>5

  print(y);

  print(z);

  if(datamodel.item){

  //do something...

  }else{

  datamodel.item=new Item();

  }

  這種寫法事實(shí)上具有更深層次的含義:

  應(yīng)該注意到,datamodel.item是一個(gè)對(duì)象(字符串,數(shù)字等),而if需要一個(gè)boolean型的表達(dá)式,所以這里進(jìn)行了類型轉(zhuǎn)換。在JavaScript中,如果上下文需要boolean型的值,則引擎會(huì)自動(dòng)將對(duì)象轉(zhuǎn)換為boolean類型。轉(zhuǎn)換規(guī)則為,如果該對(duì)象非空,則轉(zhuǎn)換為true,否則為false.因此我們可以采取這種簡(jiǎn)寫的形式。

  而在傳統(tǒng)的編程語言(強(qiáng)類型)中,我們則需要:

  if(datamodel.item!=null){

  //do something...

  }else{

  datamodel.item=new Item();

  }

  數(shù)據(jù)類型的判斷

  前面講到JavaScript特性的時(shí)候,我們說過,JavaScript是一個(gè)弱類型的語言,但是有時(shí)我們需要知道變量在運(yùn)行時(shí)的類型,比如,一個(gè)函數(shù)的參數(shù)預(yù)期為另一個(gè)函數(shù):

  function handleMessage(message,handle){

  return handle(message);

  }

  當(dāng)調(diào)用handleMessage的函數(shù)傳遞的handle不是一個(gè)函數(shù)則JavaScript引擎會(huì)報(bào)錯(cuò),因此我們有必要在調(diào)用之前進(jìn)行判斷:

  function handleMessage(message,handle){

  if(typeof handle=="function"){

  return handle(message);

  }else{

  throw new Error("the 2nd argument should be a function");

  }

  }

  但是,typeof并不總是有效的,比如下面這種情況:

  var obj={};

  var array=["one","two","three","four"];

  print(typeof obj);//object

  print(typeof array);//object

  運(yùn)行結(jié)果顯示,對(duì)象obj和數(shù)組array的typeof值均為”object”,這樣我們就無法準(zhǔn)確判斷了,這時(shí)候,可以通過調(diào)用instanceof來進(jìn)行進(jìn)一步的判斷:

  print(obj instanceof Array);//false

  print(array instanceof Array);//true

  第一行代碼返回false,第二行則返回true。因此,我們可以將typeof操作符和instanceof操作符結(jié)合起來進(jìn)行判斷。

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI