javascript 六種數據類型


js的數據類型和常見隱式轉化邏輯。

一、六種數據類型

原始類型(基本類型):按值訪問,可以操作保存在變量中實際的值。原始類型匯總中null和undefined比較特殊。

引用類型:引用類型的值是保存在內存中的對象。

* 與其他語言不同的是,JavaScript不允許直接訪問內存中的位置,也就是說不能直接操作對象的內存空間。在操作對象時,實際上是在操作對象的引用而不是實際的對象。所以引用類型的值是按引用訪問的。

二、隱式轉換

1、+和-

巧用+和-規則轉換類型

把變量轉換成數字:num-0;

把變量轉換成字符串:num+'';

2、a==b

類型相同,同===

類型不同,嘗試類型轉換和比較:

3、a===b

類型不同,返回false

類型相同:

三、包裝對象

基本類型中的number,string和boolean都有對應的包裝類型。

把一個基本類型嘗試用對象的方式使用它的時候,比如訪問length屬性,或者增加一些屬性的操作時,javascript會把這些基本類型轉化為對應的包裝類型對象。完成這樣一個訪問比如a.length返回以后或者a.t設置了以后,這個臨時對象會被銷毀掉。所以a.t賦值3了以后,再去輸出a.t值是undefined。

str,number和true都有包裝類型,所以可以把數字用括號括起來調用toString()方法

四、類型檢測

javascript中類型檢測方法有很多:

  • typeof
  • instanceof
  • Object.prototype.toString
  • constructor
  • duck type

1、typeof

最常見的就是typeof:

 比較特殊的是typeof null返回“object”。

歷史原因,規范嘗試修改typeof null返回“null”修改完大量網站無法訪問,為了兼容,或者說歷史原因返回"object"。

typeof對基本類型和函數對象很方便,但是其他類型就沒辦法了。

判斷一個對象是不是數組?用typeof返回“object”。對對象的判斷常用instanceof。

2、instanceof

基於原型鏈操作。obj instanceof Object。

左操作數為對象,不是就返回false,右操作數必須是函數對象或者函數構造器,不是就返回typeError異常。

原理:判斷左邊的左操作數對象原型鏈上是否有右邊這個構造函數的prototype屬性

 任何一個構造函數都有一個prototype對象屬性,這個對象屬性將用作new出來的對象的原型。

bosn instanceof Person的時候發現bosn的原型也就是Student.prototype不等於Person.prototype,所以原型鏈還會向上查找,bosn的原型的原型等於Person.prototype所以返回true。

instanceof在判斷對象是不是數組,Data,正則等時很好用。

instanceof不同window或iframe之間的對象類型檢測不能使用instanceof!

3、Object.prototype.toString

需要注意的是IE6/7/8中 Object.prototype.toString.apply(null)返回“[object Object]”。

4、constructor

任何對象都有constructor屬性,繼承自原型的,constructor會指向構造這個對象的構造器或者構造函數。

constructor可以被改寫,所以使用要小心。

5、duck type

 比如不知道一個對象是不是數組,可以判斷它的length是不是數字,它是不是有join,push這樣一些數組的方法。通過一些特征判斷對象是否屬於某些類型,這個有時候也常用。

 

總結:

6、如何檢測一個變量是字符串

有另外一種方法:將變量和空字符拼接后再和原來變量做全等判斷

var str="hello";
var temp=str+'';
temp===str
//true


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM