javascript 六種數據類型(一)

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

1、六種數據類型

原始類型(基本類型):按值訪問,能夠操做保存在變量中實際的值。原始類型彙總中null和undefined比較特殊。html

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

* 與其餘語言不一樣的是,JavaScript不容許直接訪問內存中的位置,也就是說不能直接操做對象的內存空間。在操做對象時,其實是在操做對象的引用而不是實際的對象。因此引用類型的值是按引用訪問的。數組

2、隱式轉換

一、+和-

巧用+和-規則轉換類型app

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

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

二、a==b

類型相同,同===網站

類型不一樣,嘗試類型轉換和比較:spa

三、a===b

類型不一樣,返回falseprototype

類型相同:

3、包裝對象

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

把一個基本類型嘗試用對象的方式使用它的時候,好比訪問length屬性,或者增長一些屬性的操做時,javascript會把這些基本類型轉化爲對應的包裝類型對象。完成這樣一個訪問好比a.length返回之後或者a.t設置了之後,這個臨時對象會被銷燬掉。因此a.t賦值3了之後,再去輸出a.t值是undefined。

str,number和true都有包裝類型,因此能夠把數字用括號括起來調用toString()方法

4、類型檢測

javascript中類型檢測方法有不少:

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

一、typeof

最多見的就是typeof:

 比較特殊的是typeof null返回「object」。

歷史緣由,規範嘗試修改typeof null返回「null」修改完大量網站沒法訪問,爲了兼容,或者說歷史緣由返回"object"。

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

判斷一個對象是否是數組?用typeof返回「object」。對對象的判斷經常使用instanceof。

二、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!

三、Object.prototype.toString

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

四、constructor

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

constructor能夠被改寫,因此使用要當心。

五、duck type

 好比不知道一個對象是否是數組,能夠判斷它的length是否是數字,它是否是有join,push這樣一些數組的方法。經過一些特徵判斷對象是否屬於某些類型,這個有時候也經常使用。

 

總結:

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

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

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

 

 

 

 本文做者starof,因知識自己在變化,做者也在不斷學習成長,文章內容也不定時更新,爲避免誤導讀者,方便追根溯源,請諸位轉載註明出處:http://www.cnblogs.com/starof/p/6368048.html有問題歡迎與我討論,共同進步。

相關文章
相關標籤/搜索