【ECMAScript5】ES5基礎

1、語法

  • 區分大小寫。
  • 變量是弱類型的,能夠初始化爲任意值,也能夠隨時改變變量所存數據的類型。
  • 每行結尾的分號無關緊要,可是建議加上。
  • 註釋
    • 單行註釋以雙斜槓開頭(//)
    • 多行註釋以單斜槓和星號開頭(/*),以星號和單斜槓結尾(*/)
  • 代碼塊:用{ } 包起來的

2、變量

使用 var (variable的縮寫)運算符聲明變量。java

能夠用一個var語句定義兩個或多個變量:正則表達式

var test1 = "hi", test2 = "hello";

變量命名規則:數組

  • 第一個字符必須是字母、下劃線(_)或美圓符號($)
  • 餘下的字符能夠是下劃線、美圓符號或任何字母或數字字符

著名的變量命名規則:函數

  • Camel 標記法:首字母是小寫的,接下來的字母都以大寫字符開頭。即駝峯。
var MyTestValue = 0, MySecondValue = "hi";
  • Pascal 標記法:首字母是大寫的,接下來的字母都以大寫字符開頭
var MyTestValue = 0, MySecondValue = "hi";
  • 匈牙利類型標記法:在以 Pascal 標記法命名的變量前附加一個小寫字母(或小寫字母序列),說明該變量的類型。例如,i 表示整數,s 表示字符串。
var iMyTestValue = 0, sMySecondValue = "hi";

能夠這樣命名:性能

類型 前綴 示例
 數組  a  aValues
 布爾型  b  bFound
 浮點型(數字)  f  fValue
 函數  fn  fnMethod
 整型(數字)  i  iValue
 對象  o  oType
 正則表達式  re  rePattern
 字符串  s  sValue
 變型(能夠是任何類型)  v  vValue

3、關鍵字

ECMA-262定義了ECMAScript支持的一套關鍵字(keyword)。根據規定,關鍵字是保留的,不能用做變量名或函數名。this

break
case
catch
continue
default
delete
do
else
finally
for
function
if
in
instanceof
new
return
switch
this
throw
try
typeof
var
void
while
with

4、保留字

ECMA-262定義了ECMAScript支持的一套保留字(reserved word)。spa

保留字在某種意思上是爲未來的關鍵字而保留的單詞。所以保留字不能被用做變量名或函數名。debug

abstract
boolean
byte
char
class
const
debugger
double
enum
export
extends
final
float
goto
implements
import
int
interface
long
native
package
private
protected
public
short
static
super
synchronized
throws
transient
volatile

5、原始值和引用值

在ECMAScript中,變量能夠存在兩種類型的值,即原始值和引用值。設計

  • 原始值:存儲在棧(stack)中的簡單數據段,也就是說,它們的值直接存儲在變量訪問的位置。
  • 引用值:存儲在堆(heap)中的對象,也就是說,存儲在變量處的值是一個指針(point),指向存儲對象的內存處。

爲變量賦值時,ECMAScript 的解釋程序必須判斷該值是原始類型,仍是引用類型。要實現這一點,解釋程序則需嘗試判斷該值是否爲 ECMAScript 的原始類型之一,即 Undefined、Null、Boolean、Number和String型。因爲這些原始類型佔據的空間是固定的,因此可將他們存儲在較小的內存區域 - 棧中。這樣存儲便於迅速查尋變量的值。3d

在許多語言中,字符串都被看做引用類型,而非原始類型,由於字符串的長度是可變的。ECMAScript打破了這一傳統。

若是一個值是引用類型的,那麼它的存儲空間將從堆中分配。因爲引用值的大小會改變,因此不能把它放在棧中,不然會下降變量查尋的速度。相反,放在變量的棧空間中的值是該對象存儲在堆中的地址。地址的大小是固定的,因此把它存儲在棧中對變量性能無任何負面影響。

6、原始類型

ECMAScript有5種原始類型(primitive type),即Undefined、Null、Boolean、Number和String。

1. typeof 運算符

對變量或值調用typeof運算符將返回下列值之一:

  • undefined - 若是變量是Undefined類型的
  • boolean - 若是變量是Boolean類型的
  • number - 若是變量是Number類型的
  • string - 若是變量是String類型的
  • object - 若是變量是一種引用類型或Null類型的

2. Null 類型

值undefined其實是從值null派生來的,所以ECMAScript把它們定義爲相等的。

alert(null == undefined);  //輸出 "true"

儘管這兩個值相等,但它們的含義不一樣。undefined是聲明瞭變量但未對其初始化時賦予該變量的值,null則用於表示還沒有存在的對象。

若是函數或方法要返回的是對象,那麼找不到該對象時,返回的一般是null。

3. 科學計數法

對於很是大或很是小的數,能夠用科學計數法表示浮點數,能夠把一個數表示爲數字(包括十進制數字)加e(或 E),後面加乘以10的倍數。

//符號表示的是數56180000。把科學計數法轉化成計算式就能夠獲得該值:5.618 x 107。
var fNum = 5.618e7

7、引用類型

引用類型一般叫作類(class),也就是說,遇到引用值,所處理的就是對象。在ECMA-262中根本沒有出現「類」這個詞。ECMAScript定義了「對象定義」,邏輯上等價於其餘程序設計語言中的類。其實就是咱們常說的「對象」。

1. Object對象

對象是由 new 運算符加上要實例化的對象的名字建立的。例如:

var o = new Object();

當有不止一個參數時,ECMAScript要求使用括號。若是沒有參數,括號能夠省略(建議不要使用):

var o = new Object;

Object對象具備如下屬性:

  • constructor:對建立對象的函數的引用(指針)。對於Object對象,該指針指向原始的Object()函數。
  • Prototype:對該對象的對象原型的引用。對於全部的對象,它默認返回Object對象的一個實例。

Object對象具備如下經常使用方法:

  • hasOwnProperty(property):判斷對象是否有某個特定的屬性。必須用字符串指定該屬性。(例如,o.hasOwnProperty("name"))
  • isPrototypeOf(object):判斷該對象是否爲另外一個對象的原型。
  • propertyIsEnumerable:判斷給定的屬性是否能夠用for...in語句進行枚舉。
  • toString():返回對象的原始字符串表示。對於Object對象,ECMA-262沒有定義這個值,因此不一樣的ECMAScript實現具備不一樣的值。
  • valueOf():回最適合該對象的原始值。對於許多對象,該方法返回的值都與ToString()的返回值相同。

2. Boolean對象

在ECMAScript中不多使用Boolean對象,即便使用,也不易理解。

問題一般出如今Boolean表達式中使用Boolean對象時。例如:

var oFalseObject = new Boolean(false);
var bResult = oFalseObject && true;    //輸出 true

建議仍是使用Boolean原始值。

3. Number對象

Number對象是Number原始類型的引用類型。要建立Number對象,採用以下代碼:

var oNumberObject = new Number(68);

要獲得數字對象的Number原始值,只須要使用valueOf()方法:

var iNumber = oNumberObject.valueOf();

(1) toFixed() 方法

toFixed()方法返回的是具備指定位數小數的數字的字符串表示。例如:

var oNumberObject = new Number(68);
alert(oNumberObject.toFixed(2));  //輸出 "68.00"

toFixed() 方法能表示具備0到20位小數的數字,超過這個範圍的值會引起錯誤。

(2) toExponential() 方法

返回的是用科學計數法表示的數字的字符串形式。

toExponential()方法也有一個參數,指定要輸出的小數的位數。

var oNumberObject = new Number(68);
alert(oNumberObject.toExponential(1));  //輸出 "6.8e+1

(3) toPrecision() 方法

根據最有意義的形式來返回數字的預約形式或指數形式。它有一個參數,即用於表示數的數字總數(不包括指數)。

var oNumberObject = new Number(68);
alert(oNumberObject.toPrecision(1));  //輸出 "7e+1"

toPrecision()方法會對數進行舍入。

var oNumberObject = new Number(68);
alert(oNumberObject.toPrecision(2));  //輸出 "68"

var oNumberObject = new Number(68);
alert(oNumberObject.toPrecision(3));  //輸出 "68.0"

4、String對象

String對象是String原始類型的對象表示法。

var oStringObject = new String("hello world");

String對象的valueOf()方法和toString()方法都會返回String類型的原始值。

1. toLowerCase()、toLocaleLowerCase()、toUpperCase() 和 toLocaleUpperCase()

  • toLowerCase()
  • toLocaleLowerCase()
  • toUpperCase()
  • toLocaleUpperCase()

toLowerCase()和toUpperCase()方法是原始的,是以java.lang.String中相同方法爲原型實現的。

toLocaleLowerCase()和toLocaleUpperCase()方法是基於特定的區域實現的。

String對象有不少的方法,後面咱們再詳細地介紹。

2. instanceof 運算符

在使用typeof運算符時採用引用類型存儲值會出現一個問題,不管引用的是什麼類型的對象,它都返回"object"。ECMAScript引入了另外一個Java運算符instanceof來解決這個問題。

instanceof運算符與typeof運算符類似,用於識別正在處理的對象的類型。與typeof方法不一樣的是,instanceof方法要求開發者明確地確認對象爲某特定類型。

var oStringObject = new String("hello world");
alert(oStringObject instanceof String);    //輸出 "true"
相關文章
相關標籤/搜索