JavaScript基本概念

來源:互聯網
上載者:User
文章目錄
  • 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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.