2014
Mar
29

Javascript 程式的定義是從 ECMAScript 而來的,如果想要知道 JS 核心是怎麼寫出來的,那麼就一定要看一下 ECMA 文件,接下就開始進入 ECMA。

ECMAScript 基本

ECMAScript 是一個 object-base 的程式語言,所有的程式都是使用 object 來運作 , 而一個 ECMAScript object 包含了多個屬性 property,每個 property 又能有多個 特性 attribute,舉例來說: property 中的一個 writable 的 attribute ,如果 writable = false,那麼你將無法修改 property 的值, property 還可以包含其他的 object, primitive value 或是 function。

Property = 屬性, Attribute = property 的特性。


Primitive value 是 ECMAScript 最基本的 object, 共有五種,分別是 Undefined, Null, Boolean, Number, String,而這幾個也就是 Javascript 最基本的物件。

宣告一個 Number 物件來試試 :

Example
  1. n = new Number(5);
  2. console.log(n.toString());
  3. //output: 5
  4.  
  5. console.log(typeof(null));
  6. //ouput: object

Undefined, Null 這兩個是定義成空集合,沒有任何 property 可以使用,所以不需要用 new 的方式宣告他們,直接使用 null 就可以了,而我故意用 typeof 去判斷 null 的型態,得到的結果也是一個 object;其它三個 Boolean, Number, String 都是支援 「new 」的。

ECMAScript 中最上層的一個 class 稱為 「Object」( O 大寫),每一個物件都會繼承 Object,所以 Javascript 中定義的「function」也是物件的一種,還記得剛剛講過的嗎,所有的程式都是 object-base,「function 」也是這樣的,每個 function 都是一個 object , function 的 method 就是他的 property,看下圖 v8 engine 定義的 object ,就能清楚的看出每個物件的階層關系。

 v8 object hierarchy

ECMAScript 還定義了其他的 object 如 global, Array, Math, Date, RegExp, JSON, Error , EvalError, RangeError, ReferenceError, SyntaxError, TypeError, URIError 等等,其中 global 這個 object 就是 Javascript 中的 「window」。

ECMAScript 提供的數學運算子有,加「+」, 減「-」, 乘「x」, 除 「/」, 餘數「%」, bit 位移「<<」,「>>」, bitwise 「&」, 「|」, 比較「==」,「>」,「<」, 「>=」, 「<=」 。

ECMAScript 的變數是不用宣告型態的,他是一種稱為弱型態的語言,程式會自動幫你選擇變數的型態,並且自動轉換成需要的型態,這點跟 PHP 是類似的。

  • own property
不包含 prototype 內的 property ,如果用 for( aa in xx) 這樣會把 prototype 的 property 也抓出來。

資料來源


回應 (Leave a comment)