JavaScript學習 2、基礎

與其說是JavaScript基礎,不如叫ECMAScript基礎,由於關於語法、類型、控制語句、函數等都是ECMAScript標準制定的。javascript

ECMAScript版次目前是第5版次,可是目前主流瀏覽器支持版次並不一致,正如咱們在第一篇簡介中介紹的同樣,ECMA-262第4版沒有發佈就夭折了,因此如今主流瀏覽器支持的是第三和第五版,須要是咱們會特別指出區別。java

 

語法

ECMAScript語法大量借鑑了C及其餘類C語言(如Java和Perl)的語法。inode

1.同C同樣,Javascript的變量是區分大小寫的。標識符、註釋、語句也同C相似,特別指出的是:Javascript 語句的末尾不加分號也能夠正常執行,但不建議這樣作。數組

ECMAScript 5 引進了嚴格模式(strict mode)的概念。嚴格模式是位javascript定義了一種不一樣的解析與執行模型。在嚴格模式下,ECMAScript 3 中的一些不肯定的行爲將獲得處理,並且對某些不安全的操做也會拋出錯誤。要在整個腳本中啓動嚴格模式,能夠在頂部添加以下代碼:瀏覽器

「use strict」;

這行代碼看起來想字符串,並且沒有賦值給任何變量,但其實他是一個編譯指示,用於告訴支持的JavaScript引擎切換到楊哥模式。安全

變量

ECMAScript的變量是鬆散類型的,能夠用來保存任何類型的數據。定義變量是使用var操做符。函數

同C同樣ECMAScript也有局部變量,在函數內生命的變量是局部變量,函數外沒法訪問。但若是函數體內不是用var聲明的變量就全局變量,所以函數體外能夠訪問。可是在嚴格模式下,給未經生命的變量賦值會返回ReferenceError異常。spa

數據類型

3.數據類型調試

ECMAScript有五種簡單數據類型(也稱爲基本數據類型):Undefined、Null、Boolean、Number、String。還有一種複雜數據類型:Object。code

使用typeof操做符返回字符串可能有:undefined、boolean、string、number、object、function。對null使用typeof操做符會返回「object」,由於特殊值null被認爲是一個空的對象引用。

Undefined類型只有一個值,就是undefined。在使用var聲明變量但未對其加以初始化時,這個變量就是undefined。

Null類型也只有一個值,就是null。null==undefined返回是true。

Boolean類型有兩個值,true和false。使用轉型函數Boolean() 能夠講一個值轉換成其對應的Boolean值。轉換規則以下:

數據類型 轉換成ture的值 轉換成false的值
Boolean true false
String 任何非空字符串 「」(空字符串)
Number 任何非零數字值 0和NaN
Object 任何對象 null
Undefined   undefined

Number類型使用IEEE754格式來表示整數和浮點數值。整數能夠用8進制和16進製表示,其中8進制前導是0,16進制前導是0x。注意,在嚴格模式下8進制格式是無效的,會拋出異常。浮點數值可使用科學表示法來表示,如var floatNum=3.14e6;注意IEEE754數值的通病是精度問題,如0.2+0.1=0.300000000000000004,因此0.2+0.1!=0.3。ECMAScript可以表示的最小數值保存在Number.MIN_VALUE中。最大值保存在Number.MAX_VALUE中。Number.NEGATIVE_INFINITY和Number.POSITIVE_INFINNITY保存着負和正的超出範圍的值,分別爲:-Infinity和Infinity。有一個函數能夠判斷數值是否有限:isFinite()。NaN即非數值。首先,任何涉及NaN的操做都會返回NaN,這個特色是在多部計算中有可能致使的問題。其次,NaN與任何值都不相等。包括NaN。因此NaN!=NaN。函數:isNaN()能夠判斷參數是否不是數值。

有三個函數能夠把非數值轉換成數值:Number() parseInt()  parseFloat()。使用parseInt()方法建議放入兩個參數,第二個參數用來肯定第一個參數表明的進制。

String類型用單引號和雙引號並無區別。ECMAScript中字符串是不可變的,也就是說一旦字符串建立,他們的值就不能改變。要改變某個變量保存的字符串,首先要銷燬原來的字符串,而後再用另外一個包含新值的字符串填充該變量。把一個值轉換成字符串使用該值自帶的toString方法(相似java),可是null和undefined是沒有這個方法的。那麼就要使用String()方法。null返回「null」,undefined返回「undefined」。

Object類型其實就是一組數據和功能的集合。同java中java.lang.Object方法同樣,是全部對象的父類。其中包含的屬性和方法以下:

  • constructor:保存着用於建立當前對象的函數。
  •  hasOwnProperty(propertyName):用於檢查給定的屬性在當前對象實例中是否存在。
  • isPrototypeOf(object):用於檢查傳入的對象是不是傳入對象的原型。
  • propertyIsEnumerable(propertyName):用於檢查給定的屬性是否可以使用for-in語句來枚舉。
  • toLocaleString():返回對象的字符串表示,該字符串與執行環境的地區對應。
  • toString():返回對象的字符串表示。
  • valueOf():返回對象的字符串、數值或者布爾值表示。一般與toString()方法返回的內容相同。

在ECMAScript中Object是全部對象的基礎,所以全部對象都具備這些基本的屬性和方法。

操做符

一元操做符:++/--/+/-同C語言。

位操做符:非~ / 與& / 或| / 異或^ / 左移<< / 有符號右移>> / 無符號右移>>>

布爾操做符:非!/ 與&& / 或||

乘性操做符:乘法* / 除法/ / 求模%

加性操做符:加法+ / 減法-

關係操做符:大於> / 小於< / 大於等於>= / 小於等於<=

相等操做符:相等和不相等==  != 先轉換再比較 / 全等和不全等 === !== 僅比較不轉換

條件操做符: ?:同java

賦值操做符: = 在等號前面再添加乘性操做符、加性操做符或位操做符就能夠完成複合賦值操做。

逗號操做符:逗號操做符多用於聲明多個變量。

語句

if語句、do-while語句、while語句、for語句、for-in語句、label語句、break、continue語句、with語句、switch語句

須要特別講一下的是label語句,這個語句相信是來自彙編或C的,用於在代碼中添加標籤,以便未來使用,通常都配合break和continue使用(是由於沒有goto語句)。由於break和continue都只能跳出最近的一次循環,配合label就能夠想跳出多少個循環就跳出多少個循環了,通常label放在for以前。

"use strict";
var num=0;

outermost:
for(var i=0; i<10; i++){
    for(var j=0; j<10; j++){
        if(i==5 && j==5){
            continue outermost;
        }
        num++;
    }
}
console.log(num);

 

想一下這段代碼會返回什麼?答案是95.由於i==5 j==5的時候跳出了循環,i繼續增長變成6,j繼續從0開始,致使i5 j五、i5j六、i5j七、i5j八、i5j9五次沒有執行。

with語句不建議使用由於會影響效率,並且增長了調試難度。

其餘語句和c或java並沒有二致。

函數

 ECMAScript函數的參數與大多數其餘語言中函數的參數不一樣,ECMAScript的函數不介意傳遞進來多少個參數,也不在意傳遞進來參數是什麼類型。ECMAScript中參數在內部是用一個數組表示的。函數接收到的始終都是這個數組,而不關心數組中有哪些參數。在函數體內能夠經過arguments對象來訪問這個數組,進而獲取到傳遞給函數的每個參數。

其實arguments只是與數組相似,並非Array的實例。

ECMAScript中全部參數傳遞的都是值,不可能經過引用傳遞參數。

由於ECMAScript函數沒有函數簽名,因此ECMAScript函數沒有重載。咱們能夠經過判斷arguments的長度來變相的來實現重載。

function doAdd(){
    if(arguments.length == 1){
        console.log(arguments[0] + 10);
    }else if(arguments.length == 2){
        console.log(arguments[0] + arguments[1]);
    }
}

var arg0 = 10;
var arg1 = 20;
doAdd(arg0);            //返回20
doAdd(arg0, arg1);   //返回30 

 

 

小結

ECMAScript中包含了全部基本的語法、操做符、數據類型、已經完成基本計算任務所必須的對象。可是沒有對取得輸入和產生輸出的機制作規定。目前大多數實現所遵循的都是ECMA-262的第三版,但已經有一部分開始實現第5版了。

 ECMAScript的基本要素有:

  • ECMAScript 中的基本數據類型包括Undefined、Null、Boolean、Number和 String。
  • ECMAScript沒有爲整數和浮點數分別定義不一樣的數據類型,Number類型能夠表示全部的數值。
  • ECMAScript中有一種複雜的數據類型 Object,該類型是這門語言中全部對象的基礎類型。
  • 嚴格模式位這門語言中容易出錯的地方施加了限制。
  • ECMAScript提供了不少與C或Java中相同的基本操做符,和類似的流控制語句。
  • ECMAScript的函數無需制定返回值。實際上,沒有指定返回值的函數返回的是一個特殊的undefined值。
  • ECMAScript沒有函數簽名的概念,由於其函數參數是以一個包含0或者多個值的數組形式傳遞的。
  • 能夠想ECMAScript函數傳遞任意數量的參數,而且能夠經過arguments對象來訪問這些參數。
  • 因爲沒有函數簽名的概念,因此ECMAScript函數不能重載。
相關文章
相關標籤/搜索