【總結】Javascript基礎

Javascript的數據類型

  •   Number
  •   String
  •   Boolean
  •   Undefined
  •   Null
  •   Object

以下圖,其中NumberStringBooleanUndefinedNull是原始類型,Object是對象類型,Object中能夠包含ArrayFunction等類型。html

 

 

常規運算符

下面來看幾行代碼app

1 var num=32
2 var str=」323 num+str=」3232」 //利用這一點能夠把數字轉換爲字符串
4 var num=123
5 num=num+」」//」32」
num=」12」
num=num-0//轉換成數字 12

當常規運算符左右兩側是NumberString的時候,若是是加號,會把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會轉換成基本類型再比較

類型包裝

原始類型中,StringNumberBoolean都有包裝類型網站

var str="string"
var s=new String("string") //String的包裝類,包含了許多的方法和屬性
str.t=10//str是基本類型,可是當咱們把str附加一個屬性並賦值的時候,Javascript會智能地把str轉換爲對應的臨時的包裝類型,當再次訪問str的t屬性的時候,發現值是undefined,由於生成的臨時包裝對象被銷燬了,因此t的值變成了undefined。

類型檢測

主要有5種類型檢測方式spa

  • Typeof
  • instanceof 
  • Object.prototye.toString
  • Constructor
  • duck type
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拿到,適合內置對象和原生類型,遇到nullundefined失效對象

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

 聲明:本博客原創文字只表明本人工做中在某一時間內總結的觀點或結論,與本人所在單位沒有直接利益關係。非商業,未受權貼子請以現狀保留,轉載時必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接。

相關文章
相關標籤/搜索