文章目錄
- Undefined
- Boolean
- Number
- String
- Object
任何語言的核心都會描述這門語言最基本的工作原理,而描述內容通常要涉及這門語言的文法、操作符、資料類型、內建功能等用於構建複雜解決方案的基本概念。
文法
JavaScript借鑒了大量借鑒了C及類C語言,熟悉這些文法的的開發人員對JavaScript上手很快,在這裡我也不一一說明了,隨著以後用會慢慢熟悉,但有幾點是需要強調的。
1.JavaScript區分大小寫,變數名,方法名,操作符都區分。相信這點大部分開發人員已經熟悉了,很多主流語言都如此。
2.標識符,所謂標識符就是指變數,方法,屬性的名字,或者方法的參數名,標識符可以是按照下列格式組合起來的一個或多個字元
a.第一個字元必須是字母、底線(_)或者 $(這個$需要注意,和很多語言不同,是可以出現在首位的);
b.其他字元可以是上述字元或者數字
3.按慣例,JavaScript標識符用駝峰命名法,第一個字母小寫,其他有意義單字首大寫,當然不這麼命名也不會出錯
4.JavaScript的注釋風格和C相同,分為單行注釋和塊級注釋,單行注釋兩個正斜線開頭,後跟注釋,多行注釋以 /* 開頭,以*/結尾,中間加註釋內容
5.JavaScript語句以分號(;)結尾,如果省略分號,則有解析器確定結尾(不推薦省略分號)
關鍵字和保留字
這個地球人都知道,這裡就把關鍵字和保留字列出來,做個參考
關鍵字 |
break |
else |
new |
var |
case |
finally |
return |
void |
catch |
for |
switch |
while |
default |
if |
throw |
|
delete |
in |
try |
|
do |
instanceof |
typeof |
|
|
|
保留字 |
abstract |
enum |
int |
short |
boolean |
export |
interface |
static |
byte |
extends |
long |
super |
char |
final |
native |
synchronized |
class |
float |
package |
throws |
const |
goto |
private |
transient |
debugger |
implements |
protected |
volatile |
double |
import |
public |
|
|
在代碼中使用關鍵字做標識符在大多數瀏覽器中會報"Identifier Expected"(缺少標識符),所以見到這個錯,如果看不錯代碼有什麼錯誤,可以查查是不是用了關鍵字做標識符。
變數
1.JavaScript的變數還是很有意思的,習慣了用C或者Java神馬的,突然學JavaScript會很不適應,JavaScript的變數是鬆散類型的,也就是弱類型,可以儲存任何類型的資料,每個變數只是一個用於儲存值的預留位置。 變數定義的時候前面就不寫類型了用 var操作符 後跟變數名
var a; //只是定義一個變數,可以存放任何值,未初始化存的是 undefined
var b=3; //定義後,直接初始化
var c="hello"; // (單引號,雙引號一樣,配對就行)
2.使用var操作符定義的變數是該變數範圍內的局部變數,在該範圍內有效,如果在方法中用var定義變數,方法結束後,變數銷毀
function test(){
var message="Hello there!"
}
test(); //方法調用的時候建立變數並賦值,執行結束後銷毀
alert(message); //undefined
3.如果定義變數的時候不寫ar操作符,這時候變數就會定義為全域變數,初始化後,在任意位置都可以使用,但很不推薦定義全域變數,不容易維護,要是幾個人同時開發,大家都定義全域變數,到時候命名衝突了,就亂套了
function test(){
message="Hello there!"
}
test(); //方法調用的時候建立變數並賦值,執行結束後銷毀
alert(message); //Hello there!
資料類型
鬆散類型也是有類型的,JavaScript有5種單一資料型別,或者說基礎資料型別 (Elementary Data Type), Udefined、Null、Boolean、Number、String,還有一種複雜的資料類型Object,object本質上石油無序的索引值對組成的。JavaScript不支援自訂類型,所以JavaScript中所有值都是上面六種類型之一。
1.typeof (o是小寫,真坑爹,經常搞錯。。。)
要是想知道一個變數是那種類型的,就得靠typeof操作符了,有一點值得注意的,typeof是操作符,不是方法(所以人家的o是小寫,不按方法規範命名),這也就是說,檢測一個變數類型的時候,用typeof XXX 就可以了,不用加把變數括起來,儘管很多人都括起來,雖然沒錯,但是沒必要,不過好像增加了可讀性,糾結。。。,還有一點,用typeof檢測一個function 返回的不是object,而是function,儘管function也是object但是比較特殊就特殊對待了,typeof null 也會返回object,而不是null,這個一會兒會說明.
var message="I'm a string";
alert(typeof mesage); //string
alert(typeof(message)); //string
alert(typeof 34); //number
Undefined
Undefined 類型只有一個值 undefined(注意大小寫,用的時候也不用加引號,人家不是string),剛才提到了,用var定義變數,但不初始化時,變數得的預設值就是undefined,一般情況下不需要顯式的把一個變數定義成undefined,undefined主要用於比較,區分Null 物件指標與未初始化的變數。
var message;
alert(message==undefined); //true
不過包含undefined值的變數和為定義的變數還是不一樣的
var message;
alert(message); //"undefined" 有引號是因為alert調用了toString方法,而不是undefined本身有引號
alert(XXX); //產生錯誤,可見未定義和未初始化是不一樣的
坑爹的時候到了,對未初始化的變數 typeof操作符返回undefined,這個好理解,然而對未聲明的變數執行typeof操作符還會返回undefined,所以不能用typeof檢測一個變數的定義與否,同樣用typeof操作符檢測變數,返回undefined也不能說明變數未定義。所以我們自己定義變數的時候盡量都顯式初始設定變數(定義完之後賦值),這樣用typeof返回undefined就知道應該是為定義的變數了,除非變數被顯式的初始化成了undefined,沒人這樣吧。。。。
Null
這個變數大名鼎鼎,是個語言都有,但JavaScript中的Null有自己的特殊性,首先和Undefined一樣,也是只有一個值 null,再說一遍變數類型首字母大寫,但值的首字母是小寫,null表示一個Null 物件指標,這也正是使用typeof null時返回object的原因。
var message=null;
alert(typeof message); //"object"
如果定義的變數準備用來存object,最好初始化為null,這樣以後用的時候,判斷一下變數值是否為null就知道變數內是否儲存對象引用了
null也有坑爹的地方,實際上undefined是派生自null的,JavaScript中它們兩個做相等判斷的時候是返回true的,儘管如此不要混淆undefined和null
alert(undefined==null); //true
上面綠色字型的是錯誤理解,一樓undefined 給指正了出來,而且講的很透徹,為了防止看的人沒看評論無解,我在這裡抄一下:
高貴的undefined和null是完全不一樣的。
==在javascript裡面不是完全相等, 而是“轉換類型後相等”
比如0=='0'
就是返回true的。
這並不能說明0和'0'具備任何關係。
實際上是有===來做比較的。
null===undefined
將返回false。
實際上除了一些特殊情況(一般也不是什麼好情況)基本上不會使用==, 而基本都會使用===來做比較。 因為這個才是我們通常意義上說的相等。
Boolean
Boolean類型有兩個值,true和false,JavaScript中和數字0、1沒關係,那是Number類型,但是有一定的轉換規則,要將一個值轉換為對應的Boolean值可以使用Boolean()
var message="Hello";
var messageBool=Boolean(message);
看看轉換規則,還是挺有用的,一個判斷作物,可能整個邏輯都不對了就
1.對非Null 字元串,轉換為true,""(Null 字元串)轉換為false
2.任何非零數字包括無窮大轉為true,負數也是哦,0和NaN轉換為false
3.任何對象都轉為true,null轉為false,undefined轉為false
Number整數
Number類型我們經常用,裡面的東西也不少,最基本的數值自變數格式是十進位整數,十進位數可以直接輸入
var a=45; //整數
除了十進位整數還可以通過八進位或十六進位字面量來表示,不過為了加以區分,八進位的字面量值第一位必須是0,然後是八位元字(o~7),數值超過範圍,如寫了個09,前面的0就會被忽略,按十進位處理,就真成9了,十六進位前兩位為0x,後跟十六進位數字(0~9,A~F),字母不區分大小寫。表示是表示的,在進行運算的時候都會轉為十進位運算。
浮點數值
浮點數就是帶小數點,並且小數點後面有數位數,由於儲存浮點數需要記憶體空間是認證的兩倍,,因此JavaScript會不失時機的吧浮點數轉換為整數,如果小數點後面沒有數字,或者數字本身就是整數(3.0),JavaScript會自動轉換為整數
var num1=3. ; //小數點後面沒有數字,解析為3
var num2=4.0 ; //整數,解析為4
對於極大或極小的數字用科學計數法表示,數字+E(e)+整數,如 2.3E6 表示2.3乘以10的6次冪,注意,是10,不是自然常數,坑爹。反正我基本沒有JavaScript處理過這麼大的數字問題。
還有一點需要注意,浮點數的最高精度是17位小數,在進行數值計算的時候精度沒有那麼高,你會驚喜的發現 0.1+0.2不等於0.3,而是0.30000000000000004
數值範圍
記憶體限制,浮點數是有範圍的,JavaScript的最小數值存放在Number.MIN_VALUE中,最大數存放在Number.MAX_VALUE,平時是夠用了,但一旦超過範圍,這個數值會自動轉成Infinity值,附屬就轉為-Infinity,這兩個無窮大樹不能參與運算的,可以用方法 isFinite()檢測數值是不是在最大與最小之間
alert(isFinite(4564756)); //true
alert(isFinite(Number.MIN_VALUE+Number.MAX_VALUE)); //false ,這兩個不能參與運算
NaN
NaN是非數值,挺奇怪的名字,英語好理解,Not a Number,這個數值用來表示本來想返回數值卻出錯了的情況,比如任何數除以0就返回NaN,不報錯。Nan有兩個特性,首先任何涉及NaN的操作都返回NaN,其次NaN和任何值都不相等,他還能和自己不相等嗎,還真能。
alert(NaN ==NaN); //false
這可腫麼知道什麼時候數值計算出了錯,JavaScript提供了一個isNaN()d的方法,這個方法接受一個參數,如果參數是數字類型就直接判斷,如果不是就嘗試裝換,再判斷
alert(isNaN(NaN)); //true
alert(isNaN(20)); //false
alert(isNaN("10")); //false,可以轉換為數字 10
alert(isNaN("OK")); //true OK轉不成數字了
alert(isNaN(true)); //false, 轉成數字1
有些奇怪的是參數也能是對象,這時先調用對象的valueOf()方法,可以轉為數字就判斷,否則就調用toString()方法,再測試傳回值
數值轉換
有三個方法可以吧數值轉換為非數值 Number(), parseInt(),parseFloat()。 Number()可以轉換任何資料類型,但規則很奇怪,很多時候得出的並非我們想要的結果,有興趣朋友可以上網查查其規則,後兩個都是轉字串為數值,比較實用。
parseInt()在轉換的時候關注的是字串是否符合數值模式,會忽略空格,如果第一個非Null 字元不是數字或負號,就會返回NaN,否則繼續解析,知道遇到非數字字元,然後截斷,也就是“1234ABD” 會被解析為1234, "23.45sdf"會被解析成23,值得注意的是字串以0開頭就會被解析成八進位,0x開頭解析成十六進位,這樣解析 "070"之類的讓人很迷惑,遇事parseInt提供了第二個參數,可以傳入進位數,預設是十
var num=parseInt("0xAF",16); //175 返回十進位,涉及到計算了嘛
var num2=parseInt("AF"); // NaN
由於不指定技術意味著讓parseInt()決定如何解析輸入的字串,為了避免錯誤解析,最好第二個參數都寫上
var num1=parseInt("010"); //8 按八進位解析
var num2=parseInt("010",8) //8 按八進位解析
var num3=parseInt("010",10) //10 按十進位解析
var num3=parseInt("010",2) //2 按二進位解析
parseFloat()和parseInt()相似,就是認識小數點和e,不再贅述
String
string大家都認識,單雙引號都一樣,匹配就行,還有一些逸出字元和C一樣,逸出字元在計算字串的長度的時候按一個計算,index也是,長度yonglength屬性取得,不是方法,沒括弧。
JavaScript中字串是不可變的,所以穿件字串初始化之後改變值,其實是把原來的字串銷毀,然後用一個新的字串充當該變數,數值、布爾值、對象、字串都有 toString()方法,null和undefined沒有,字串的方法很多,處理也很常見,用法很靈活,我這裡不一一列舉了,給個連結吧
http://www.dreamdu.com/javascript/object_string/ 這個我覺得還不錯
Object
這個一句兩句說不清楚,只能簡單提提,隨著以後使用越來越多,會慢慢熟悉。JavaScript的對象可以看做一組資料和方法的集合,建立對象很簡單
var o=new Object();
Object的每個執行個體都有下列屬性和方法
1.constructor 儲存著用於粗昂見當前對象的方法,解釋建構函式
2.hasOwnProperty 用於建廠給定屬性是否在當前對象中,而不是執行個體原型中,傳入參數為屬性名稱
3.isPrototypeOf 用於檢查傳入的對象是否為另一對象的原型
4.propertyIsEnumrable 用於檢查給定的屬性是否夠使用for in語句
5.toString 這個就不多說了
6.valueOf 這個不多少了,顧名思義即可
其實String和Object的東西最多我感覺,反而說的最少,後續慢慢介紹吧,這些東西要是沒學過JavaScript,真的讓人是雲裡霧裡,不過接著下面的學習就清楚了,這裡有個概念就可以。
這次說的差不多了,下次我會總結一下操作符語句和方法或者說函數,希望大家多多指教
轉自:http://www.cnblogs.com/dolphinX/archive/2012/03/18/2390040.html