javascript 基礎一

兩年前在重溫javascript紅寶書《javascript高級程序設計》時,方便自己臨時查閱某些忘記的基礎知識,順便用evernote整理瞭一下筆記。這些年在cnblogs拜讀各位大神的blog,而自己沒寫過公開的blog。現在把筆記整理上來,希望對入門的童鞋有點點幫助~

 

  javascript基礎一,後面還有兩篇哦~可能個別文字或者表達有問題,歡迎各位指出  

 

  附上evernote的公開鏈接:https://app.yinxiang.com/shard/s10/sh/81bef8e2-f56f-4f28-bb74-ed81f413de2c/3d14cd48699ce4a4a2cea8f55fe8f0cf

 

標識符:以字母、下劃線或者美元符號開頭,標識符的其他字母可以是字母、下劃線、美元符號或者數字。

不能以保留字、關鍵字、true、false或者null作標識符

js區分大小寫

var   var是一個關鍵字

標識符即變量的名稱

區分大小寫

變量

定義瞭而未初始化(即賦值)的變量,其值為undefined。

undefined:任何未定義或者定義瞭但未初始化的變量,都會保存undefined,使用未定義變量會報錯

註意函數中定義變量為局部變量,隨函數退出時銷毀。

變量可以保存任何類型的值,而且可以隨時改變保存的類型。

數據類型(6種)

5種基本(簡單)數據類型:Undefined、Null、Boolean、String、Number

1種復雜類型:Object

typeof操作符

返回一個字符串   eg:typeof "string"

"undefiend"-這個值未定義或者未初始化

"string"-這個值是字符串

"boolean"-這個值是佈爾值

"number"-這個值是數值

"object"-這個值是null或者對象

"function"-這個值是函數

註意:返回的字符串是小寫字母開頭

Undefined類型

聲明(定義)瞭而未初始化的變量保存著undefined值

未定義的變量直接使用會報錯(typeof操作符例外)

typeof 未定義的變量和typeof未初始化的變量都返回"undefined",由此typeof區分不瞭為定義的變量和未初始化的變量

變量定義後推薦立即初始化

Null類型

null值表示一個空指針對象!

故 var car =  null; alert(typeof car); 返回object     因為null其實是一個特殊的對象!

若一個變量準備保存對象,最好初始化為null,表示它為對象,隻要檢查它是否等於null就知道是否保存瞭一個對象的引用。即要保存對象的變量還沒真正保存對象,就應該明確讓變量保存null值。

undefined派生自null,即alert(null == undefined)  返回true,但其間發生瞭類型轉換。

Boolean類型

隻有兩個值:true和false,註意大小寫

所有數據類型都有與boolean類型相對應的值,通過轉型函數Boolean()實現,註意在判斷條件中自動調用轉型函數。

Boolean()的轉換規則(紅皮書P23)

Number類型

數值表示   不是0開頭表示10進制(12),0開頭且以8為基數表示8進制(070),0x開頭且以16為基數表示16進制(0xaf)。

運算時,數值始終轉為十進制,結果也以十進制來表示。

浮點數:該數值必須隻包含一個小數點,而且小數點後面至少有一位數字。

註意浮點數在某些情況下會自動轉為整數

浮點數數值計算會產生舍入的誤差問題,不要測試某個特定的浮點數值

數值范圍:ECMAScript表示范圍:Number.MIN_VALUE至Number.MAX_VALUE

超出范圍,被轉換為特殊的Infinity,正無窮Infinity,負無窮-Infinity

isFinite()函數檢查是否在最大和最小值之間,是則返回true,否則返回false

NaN:非數值,表示一個本來要返回數值的操作數未返回數值的情況。

任何涉及NaN的操作(如NAN/0)都返回NAN,在計算中要註意

NaN不等於任何值,包括他自身(隻能通過isNaN()函數來判斷是否為NaN),isNaN()嘗試轉換傳入的參數為數值

數值轉換

Number()函數:可以傳入任何數值類型

如果是Boolean,true為1,false為0

數字值,簡單的傳入和返回

Undefined,始終返回NaN

Null,始終返回0? Chorme25 返回NaN

字符串:

隻含有數字,則轉為十進制,會忽略前導的0

含有合法的浮點數,轉為浮點數,同樣忽略前導的0

含有有效的十六進制格式(如:0xf),轉為十進制返回(註意:八進制就不能識別出來,按照規則1來處理)

空字符串,返回0

字符串包含除上述的字符外,其他都轉為NaN

對象:先調用valueOf()方法,按照前面的規則處理,如果是NaN,則再調用toString()方法,再次按照規則處理。

parseInt()函數:隻能轉入字符串,原理:看是否符合數值模式

他會忽略開始的所有空格,找到第一個非空格字符

找到的第一個字符不是數字字符或者是負號,則返回NaN

註意:空字符串parseInt()返回非數值NaN,而Number()返回0

如果第一個字符是數字字符,則會解析到不是數字字符為止,註意:小數點不是有效的數字字符!

parseInt()能識別各種整數格式(八進制、十進制、十六進制),註意Number()函數隻能識別十進制、十六進制

eg: parseInt("0x15")  返回21(16*1+5)

eg:parseInt("07")  返回7,當做十進制的7

parseInt()還能指定轉換基數,即返回何種整數格式,eg:parseInt("010",8);返回8,結果也以八進制返回

註意:指定基數時,是指把待處理字符串顯示輸出為指定的進制

區別:number.toString()中,number被識別為十進制,而且number一定為Number類型,之後再按照傳入的基數返回toString()的值

parseFloat()函數:隻能轉入字符串

與parseInt()類似,忽略前導的0,找到第一個合法的浮點數字字符,小數點是合法的,故可以是以小數點作為第一個字符

區別:parseFloat()可以識別所有浮點格式(指科學計數法,返回的不是科學計數法的形式),但隻能解析十進制值,任何十六進制都會轉為0,八進制按照十進制方式解析,因為八進制是以0作為前導

parseFloat()沒有轉換基數

parseFloat()可以解析包含合法整數的字符串

String類型

字符字面量

轉義序列   eg:   \b(空格)   \n(換行)  \'   \"(轉義單、雙引號)

具有長度屬性length,對於單字節字符有效,雙字節字符不精確

特點:字符串是不可變的,一旦創建,他們的賦值就不能改變,要改變,必須銷毀原來的字符串,再用新值得字符串填充該變量。

轉為字符串的方法。

toString()方法。

每個字符串都有toString()方法,除瞭null、undefined值沒有這個方法,其他的值都有。

對於Number類型調用時,可以傳入輸出數值的基數。即返回指定有效進制的字符串值,eg:  10..toString(8) 返回8,10.toString()返回10,默認基數為10。這樣就為表示各種進制數時提供瞭方便!但隻有十進制Number能調用toString()方法,其他進制的Number類型一律當成十進制!即,把數值輸出成個種進制的表示方式!註意Number..toString()與Number.toString()的區別

傳入數值的基數後,返回的是指定的進制表示的數值,但為瞭完整表示該進制,必須給八進制和十六進制分別添加0和0x作為開頭

String()方法。

任何類型的值都能轉為字符串,但null、undefined同樣沒有

轉換規則:先調用toString()方法,若則調用String()方法

String()方法不能傳參

語句

註意:不存在其他語言一樣的塊級作用域,所有流程控制語句中定義的變量都可以被流程控制外訪問到。

if語句:條件可以是表達式,表達式求值的結果可以不為佈爾值,那就會自動調用Boolean()來轉換求值的結果而得到佈爾值

for-in語句:是一種精準的迭代語句,可以枚舉對象的屬性。

eg:  var obj = { a: 1, b: 2}; for(key in obj){ console.log( obj[key] ) }  // 1  \n  2 

註意,key是字符串類型,故不能用點的方式來訪問,必須用對象的方式來訪問

switch語句:

switch()中的參數可以是任何數據類型,數值、字符串、對象都可以。

case中的值不一定是常量,可以是變量或者表達式

switch中執行的全等操作符,不會發生類型的轉換

 

發佈留言