《JavaScript權威指南第六版》學習筆記-JavaScript概述

xf27發表於2017-10-28
第一章、JavaScript概述

JavaScript是一門高階的、動態的、弱型別的程式語言,非常適合物件導向和函式式的程式設計風格。JavaScript的語法源自Java,它的一等函式(first-class function)來自於Scheme,它的基於原型(prototype-based)的繼承來自於Self。

JavaScript語言核心

//所有在雙斜線之後的內容都屬於註釋

//仔細閱讀這裡的註釋,它們對JavaScript程式碼做了解釋

//變數是表示值的一個符號名字

//變數是通過Vvar關鍵字宣告的

var x; //宣告一個變數x

//值可以通過等號賦值給變數

x=0; //現在變數x的值為0

x //=》0:通過變數獲取其值

//JavaScript支援多種資料型別

x=1; //數字

x=0.01; //整數和實數共用一種資料型別

x="hello world"; //由雙引號內的文字構成的字串

x='JavaScript'; //由單引號內的文字同樣構成字串

x=true; //布林值

x=false; //另一個布林值

x=null; //null是一個特殊的值,意思是"空"

x=undefined; //undefined和null非常的相似

//JavaScript中的最重要的型別是物件

//物件是名/值對的集合,或字串到值對映的集合

  var book={  //物件是由花括號括起來的
    topic:"JavaScript", //屬性"topic"的值是"JavaScript"
    fat:true          //屬性"fat"的值是true
  };    //右花括號標記了物件的結束複製程式碼

//通過"."或"[]"來訪問物件屬性

  book.topic   //=>"JavaScript"
  book["fat"]  //=>true:另外一種獲取屬性的方式
  book.author="xufang";  //通過賦值建立一個新屬性
  book.contents={};     //{}是一個空物件,它沒有屬性複製程式碼

//JavaScript同樣支援陣列(以數字為索引的列表)

  var primes=[2,3,5,7];   //擁有4個值的陣列,由"[""]"劃定邊界
  primes[0]      //=>2:陣列中的第一個元素(索引為0)
  primes.length; //=>4:陣列中的元素個數
  primes[primes.length-1] //=>7:陣列的最後一個元素
  primes[4]=9;   //通過賦值來新增新元素
  primes[4]=11;  //或通過賦值來改變已有的元素
  var empty=[];   //[]是空陣列,它具有0個元素
  empty.length    //=>0複製程式碼

//陣列和物件中都可以包含另一個陣列或物件:

  var points={
    {x:0,y:0},   //具有兩個元素的陣列
    {x:1,y:1}    //每個元素都是一個物件
  };
  var data={      //一個包含兩個屬性的物件
    trial1:[[1,2],[3,4]],   //每個屬性都是陣列
    trial2:[[2,3],[4,5]],    //陣列的元素也是陣列
  }複製程式碼

通過方括號定義陣列和通過花括號定義物件屬性名和屬性值之間的對映關係的語法稱為初始化表示式(initializer expression)

運算子(operator)

//運算子作用於運算元,生成一個新的值

//最常見的是算術運算子

3+2   //=>5:加法
3-2   //=>1:減法
3*2   //=>6:乘法
3/2   //=>1.5:除法
point[1].x - points[0].x  //=>1:更復雜的運算元也能照常工作
"3" + "2"  //=>"32":+可以完成加法運算也可以作字串連線複製程式碼

//JavaScript定義了一些算術運算子的簡寫形式

var count=0;  //定義一個變數
count++;    //自增1
count--;    //自減1
count+=2;   //自增2:和"count=count+2"寫法一樣
count*=3;    //自乘3:和"count=count*3"寫法一樣
count;    //=>6:變數本身也是一個表示式複製程式碼

//相等關係運算子用來判斷兩值是否相等

//不等、大於、小於運算子的運算結果是true或false

var x=2,y=3;   //這裡的=等號是賦值的意思,不是比較相等
x == y       //=>false:相等
x != y     //=>true:不等
x < y     //=>true:小於
x <= y    //=>true:小於等於
x > y     //=>false:大於
x >= y     //=>false:大於等於
"two" == "three"   //=>false:兩個字串不相等
"two" > "three"   //=>true:"tw"在字母表中的索引大於"th"
false == (x > y)   //=>true:falsefalse相等複製程式碼

//邏輯運算子是對布林值的合併和求反

(x == 2) && (y == 3)  //=>true:兩個比較都是true,&&表示"與"
(x > 3) || (y < 3)   //=>false:兩個比較不都是true,||表示"或"
!(x == y)   //=>true:求反複製程式碼

//函式是一段帶有引數的JavaScript程式碼端,可以多次呼叫

function plus1(x){  //定義了名為plus1的一個函式,帶有引數x
  return x+1;       //返回一個比傳人的引數大的值
}            //函式的程式碼塊是由花括號包裹起來的部分
plus1(y)         //=>4:y為3,呼叫函式的結果為3+1

var square=function(){      //函式是一種值,可以賦值給變數
  return x*x;        //計算函式的值
};          //分號標識了賦值語句的結束
square(plus(y))             //=>16:在一個表示式中呼叫兩個函式複製程式碼

當將函式和物件合寫在一起時,函式就變成了“方法”(method)

//當函式賦值給物件的屬性,我們稱為"方法",所有的JavaScript物件都含有方法

var a=[];     //建立一個空陣列
a.push(1,2,3)   //push()方法向陣列中新增元素
a.reverse();     //另一個方法:將陣列元素的次序反轉

//我們也可以定義自己的方法,"this"關鍵字是對定義方法的物件的引用,這裡的例子是上文中提到的包含兩個點位置資訊的陣列
points.dist=function(){         //定義一個方法用來計算兩點之間的距離
  var p1=this[0];         //通過this獲取對當前陣列的引用
  var p2=this[1];           //並取得呼叫的陣列前兩個元素
  var a=p2.x - p1.x;      //x座標軸上的距離
  var b=p2.y-p1.y;       //y座標軸上的距離
  return Math.sqrt(a*a+b*b)     //用Math.sqrt()來計算平方根
} 
points.dist();          //=>1.414:求得兩個點之間的距離複製程式碼

JavaSctipt是一種物件導向的程式語言

//定義一個建構函式以初始化一個新的Point物件
function Point(x,y){   //按照慣例,建構函式均以大寫字母開始
  this.x=x;            //關鍵字this指代初始化的例項
  this.y=y;        //將函式引數儲存為物件的屬性
}            //不需要return

//使用new關鍵字和建構函式來建立一個例項
var p=new Point(1,1);   //平面幾何中的點(1,1)

//通過給建構函式的prototype物件賦值
//來給Point物件定義方法
Point.prototype.r=function(){
  return Math.sqrt(           
    this.x*this.x+this.y*this.y    //this指代呼叫這個方法的物件
    );
}

//Point的例項物件p(以及所有的Point例項物件)繼承了方法r()
p.r();複製程式碼
客戶端JavaScript

JavaScript語言核心

|版權宣告:本文為summer博主原創文章,未經博主允許不得轉載。

相關文章