《JavaScript高級程序設計》筆記——chapter3 基本概念

ECMA-262通過叫做ECMAScript的“僞語言”爲我們描述了所有的基本概念:
  • 語法
  • 關鍵字和保留字
  • 變量
  • 數據類型
  • 操作符
  • 語句
  • 函數



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


3.1.1  區分大小寫    ECMAScript中的一切(變量、函數名和操作符)都區分大小寫。


3.1.2  標識符

標識符,就是指變量、函數、屬性的名字,或者函數的參數
標識符可以是按照下列各式規則組合起來的一個或多個字符:
  • 第一個字符不能是數字,必須是一個字母、下劃線(_)或者一個美元符號($);
  • 其他字符可以是字母、下劃線、美元符號或數字。
按照慣例,ECMAScript標識符采用駝峯大小寫格式,也就是第一個字母小寫,剩下的每個單詞的首字母大寫。
注:不能把關鍵字、保留字、true、false 和 null 用作標識符。

特殊:(其實也是慣例)爲了區別ECMAScript中的其他函數,構造函數始終都應該以一個大寫字母開頭,而非構造函數則應該以一個小寫字母開頭。(摘自《JavaScript高級程序設計》P145)     例如:

function Person(name, age, job) {
    this.name = name;
    this.age = age;
    this.job = job;
    this.sayName = function() {
      alert(this.name)
    };
}



 3.1.3 註釋

單行註釋以兩個斜槓開頭:
//   單行註釋
多行註釋以  /*  開頭,以  */  結尾:
/*    
*     這是一個多行(塊級)註釋    
*
*/


3.1.4 嚴格模式

ECMAScript 5 引入了嚴格模式(strict mode的概念。
嚴格模式是爲JavaScript 定義了一種不同的解析與執行模型。在嚴格模式下,ECMAScript 3 中的一些不確定的行爲將得到處理,而且對某些不安全的操作也會拋出錯誤。
要在整個腳本中啓用嚴格模式,可以在頂部添加如下代碼:
"use strict";
這行代碼看起來像是字符串,而且也沒有賦值給任何變量,但其實它是一個編譯指示(pragma),用於告訴支持的JavaScript 引擎切換到嚴格模式。這是爲不破壞ECMAScript 3 語法而特意選定的語法。
在函數內部的上方包含這條編譯指示,也可以指定函數在嚴格模式下執行:
function doSomething(){
"use strict";
//函數體
}
持嚴格模式的瀏覽器包括IE10+Firefox 4+Safari 5.1+Opera 12+Chrome


3.1.5  語句

語句是以一個分號( ; )結尾;任何時候不要省略它。
代碼塊可以使用花括號({  }) 來把多條語句組合到一個代碼塊中。
 



3.2  關鍵字和保留字

關鍵字: 可以用來表示控制語句的開始和結束,或者用於執行特定操作。不能用於標識符。
注: 帶*上標的是第5版新增的關鍵字

保留字: 還沒有任何特定的用途(囧),但它們可能在將來被用作關鍵字。
注: let 和 yield 是第5版新增的保留字。

最好不要使用關鍵字和保留字作爲標識符和屬性名!




3.3 變量(第四章整章詳述)

ECMAScript 的變量是鬆散類型的,即可以用來保存任何類型的數據。
定義變量是要使用 var 操作符,後跟變量名(即一個標識符)。
例:  var  message;
另外,可以同時定義多個變量,主要把每個變量用逗號分隔開即可:

var message = "hi",
    found = false,
    age = 28;

注意:var 操作符定義的變量將成爲定義該變量的作用域中的局部變量。也就是說,在函數中使用 var 定義了一個變量,那麼這個變量在函數退出後就會被銷燬。
例如:

function test () {
var message = "hi"; //局部變量
}
test();
alert(message);  //錯誤
這個例子中如果省略 var ,message將會變成全局變量,就可以在函數外部的任何地方被訪問到。
但是由於在局部作用域中定義全局變量很難維護,而且如果有意忽略 var 操作符,也會由於相應變量不會馬上有定義而導致不必要的混亂。所以,不推薦這麼使用。

 



3.4  數據類型
 
5種基本數據類型Undefined、   Null、   Boolean、   Number  和  String
1種複雜數據類型Object——本質上是由一組無序的名值對組成的。(第五章詳述)


3.4.1  typeof 操作符

作用:用來檢測給定變量的數據類型。
對一個值使用 typeof 操作符可能返回下列某個字符串:
  • "undefined"——如果這個值未定義
  • "boolean"——如果這個值是布爾值
  • "string"——如果這個值是字符串
  • "number"——如果這個值是數值
  • "object"——如果這個值是   對象  或 null(因爲特殊值 null 被認爲是一個空的對象引用)
  • "function"——如果這個值是  函數


3.4.2 Undefined 類型

Undefined 類型只有一個值,即特殊的 undefined。

在使用 var 聲明變量,但並未對其加以初始化時,這個變量的值就是 undefined。
不過,包含undefined值的變量和尚未定義的變量還是不一樣的。例:

var a;      // a 聲明後未賦值,默認取得undefined值
// var b;   // b 沒有聲明

alert(a);   //"undefined"
alert(b);   //產生錯誤

alert(typeof a);  // "undefined" 
alert(typeof b);  // "undefined"   
雖然 a 和 b 一個聲明,一個未聲明,本質上有區別,但實際上無論對哪個變量也不可能執行真正的操作。 typeof操作符都返回undefined。


3.4.3  Null 類型

只有一個值,即特殊的  null 。
從邏輯上講,null 值表示一個空對象的指針。所以用 typeof 檢測 null 值會返回 "object"。如下:

var car = null;
alert(typeof car);  //"object"

實際上, undefined 派生自 null 值。  alert(null == undefined);  //true  


3.4.4  Boolean 類型

該類型只有兩個字面值: true  和  false  
雖然Boolean類型的字面值只有兩個,但 ECMAScript 中所有類型的值都有與這兩個 Boolean 值等價的值。
這些轉換規則對理解流控制語句自動執行相應的Boolean轉換非常重要。


3.4.5  Number 類型

1、浮點數值
——該數值中必須包含一個小數點,並且小數點後面必須至少有一位數字。

var floatNum1 = 1.2;
var floatNum1 = 0.2;
var floatNum1 =  .2;  //有效,但不推薦

對於極大或極小的數值,可以使用科學計數法表示

var floatNum = 3.21e6;  //等於3210000;  

浮點數的最高精度是17位小數,但在進行算術計算時精確到遠遠不如整數。會產生舍入誤差。



2、數值範圍

ECMAScript能表示的最小數值保存在 Number.MIN_VALUE 中,在大多數瀏覽器中,這個值是 5e-324
ECMAScript能表示的最大數值保存在 Number.MAX_VALUE 中,在大多數瀏覽器中,這個值是 1.7976931348623157e+308
超出這兩個數值範圍,會轉換爲:
正無窮(Infinity)  負無窮(-Infinity)

用函數 isFinite(  )來確定一個數值是不是有窮的(即是不是位於最大值與最小值之間)


3.NaN 
——即非數值(Not a Number)

用於表示一個本來要返回數值的操作數未返回數值的情況。

特點:
  1. 任何涉及NaN的操作(例如 NaN/10)都會返回NaN
  2. NaN 與任何值都不相等,包括NaN本身。

isNaN(  )來確定一個參數是否“不是數值”。

alert(isNaN(NaN));       //true
alert(isNaN(10));        //false 
alert(isNaN("10"));      //false (可以被轉換成數值10)
alert(isNaN("blue"));    //true  (不能被轉換成數值)
alert(isNaN(true));      //false (可以被轉換成數值1)


4、數值轉換

有3個函數可以把非數值轉換爲數值:
  • Number( )    用於任何數據類型
  • parseInt( )    字符串>>>數值
  • parseFloat( ) 字符串>>>數值

轉換規則如下:


3.4.6  String 類型

1、字符字面量(轉義序列)
這些字符字面量可以出現在字符串中的任意位置,而且也將被作爲一個字符來解析,如下面的例子所示:
var text = "This is the letter sigma: \u03a3.";
這個例子中的變量text 28 個字符,其中6 個字符長的轉義序列表示1 個字符。

2、轉換爲字符串

  • toString(  ) 
    數值、布爾值、對象甚至字符串都有toString(  ) 方法。但 null  和  undefined  沒有該方法。
  • String(  )
    • 如果值有 toString(  ) 方法,則優先調用該方法並返回相應結果。
    • 如果值是 null ,則返回 "null"
    • 如果值是 undefined,則返回 "undefined"

var value1 = 10;
var value2 = true;
var value3 = null;
var value4 ;

alert(String(value1));    // "10"
alert(String(value2));    // "true"
alert(String(value3));    // "null"
alert(String(value4));    // "undefined"


3.4.7  Object 類型

——對象就是一組數據和功能的集合。

可以通過執行 new 操作符後跟要創建的對象類型的名稱來創建。
在ECMAScript中,Object類型是所有它的實例的基礎。

Objec每個實例都具有下列屬性和方法:
  • constructor : 保存着用於創建當前對象的函數。
  • hasOwnProperty(propertyName) : 用於檢查給定的屬在當前對象實例中(而不是在實例的原型中)是否存在。
  • isPrototypeOf(object) : 用於檢查傳入的對象是否是當前對象的原型。
  • propertyIsEnumerable(properName) : 用於檢查給定的屬性是否能夠使用 for-in 語句來枚舉
  • toLocaleString( ) : 返回對象的字符創表示,該字符串與執行環境的地區相關
  • toString( ) : 返回對象的字符串表示
  • valueOf( ) : 返回對象的字符串、數值或布爾值表示。







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章