以下圖,其中Number
、String
、Boolean
、Undefined
、Null
是原始類型,Object
是對象類型,Object
中能夠包含Array
、Function
等類型。html
下面來看幾行代碼app
1 var num=32 2 var str=」32」 3 num+str=」3232」 //利用這一點能夠把數字轉換爲字符串 4 var num=123 5 num=num+」」//」32」
num=」12」 num=num-0//轉換成數字 12
當常規運算符左右兩側是Number
和String
的時候,若是是加號,會把Number
轉成String
處理,若是是減號,則String
會被轉成Number
處理,乘法和除法相似於減法。 函數
var c=(0==false) /true var c=(0===false)// false 嚴格等於 除了類型相等,值也要相等
(null==undefined)//true (null===undefined)//false new Object() == new Object()// false Object是引用類型 [1,2]==[1,2] //false 由於[1,2] 是Array 屬於Object 因此是False null==null //true null===null //true undefined==undefined//true undefined===undefined//true NaN==NaN //false NaN===NaN //false NaN和誰都不想等,即便是本身 12=="12"//true 等號兩邊一個是數字一個是字符串,編譯器會嘗試把字符串轉成數字 true==1//true 等號兩邊一個是布爾值一個是其餘類型,編譯器會嘗試把布爾轉成數字再比較 true=="1" //true var a=new Object("123") a==123 //true a=」123」//true 若是等號兩邊一邊是Object另外一邊是Number或者String,Object會轉換成基本類型再比較
原始類型中,String
、Number
、Boolean
都有包裝類型網站
var str="string" var s=new String("string") //String的包裝類,包含了許多的方法和屬性 str.t=10//str是基本類型,可是當咱們把str附加一個屬性並賦值的時候,Javascript會智能地把str轉換爲對應的臨時的包裝類型,當再次訪問str的t屬性的時候,發現值是undefined,由於生成的臨時包裝對象被銷燬了,因此t的值變成了undefined。
主要有5種類型檢測方式spa
typeof 100 //"number" typeof true//"boolean" typeof function(){}//"function" typeof(undefined)//"undefined" typeof new Object()//"object" typeof [1,2]//"object" typeof NaN//"number" typeof null//"object"?原本是規定返回「null」 可是這致使了大量的網站癱瘓,因此規定返回「Object」 typeof Null//"undefined"
null
大小寫不一致時返回的類型也不同prototype
typeof
適用於原始類型以及function
的檢測,遇到null
失效code
instanceof
是基於原型鏈的,適用於Object
自定義對象,也能夠用來檢測原生對象,在不一樣的iframe和window間檢測時失效,右側對象必須是函數對象或函數構造器,不然就會拋出異常htm
Object.Prototype.toString.appy([])經過{}.toString拿到,適合內置對象和原生類型,遇到null
和undefined
失效對象
instanceof 123 //會拋出以下異常
Uncaught SyntaxError: Unexpected token instanceofblog
[1,2] instanceof Array //true !!!原理是判斷左側對象的原型鏈上是否有右側構造函數的prototype屬性。
ject.Prototype.toString.appy([]);===」[object Array]」 Object.Prototype.toString.appy(function(){});===」[object Function]」 Object.Prototype.toString.appy(nll);=== 」[object Null]」 //IE 678 返回的是[objet object]兼容性問題 Object.Prototype.toString.appy(undefined);=== 」[object Undefined]」
做者:悠揚的牧笛
博客地址:http://www.cnblogs.com/xhb-bky-blog/p/5854646.html
聲明:本博客原創文字只表明本人工做中在某一時間內總結的觀點或結論,與本人所在單位沒有直接利益關係。非商業,未受權貼子請以現狀保留,轉載時必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接。