learn javascript中文版,筆記總結————呱呱二號

看完這pdf以後,明白了挺多關於javascript的一些疑問。javascript

 

一、==和===區別php

var foo = 42;java

var bar = 42;編程

var baz = "42";數組

var qux = "life";瀏覽器

foo == bar 將斷定爲 true ,而 baz == qux 將斷定爲 false 。然而,盡 管 foo 和 baz 是不一樣類型, foo == baz 也將斷定爲 true 。安全

== 等性運 算符在判斷等價性以前會嘗試強制將操做數轉爲相同類型。這與 === 全等運算符 不一樣。閉包

=== 全等運算符判斷兩個變量是否類型和值 都 相等。在這種狀況下, foo === bar 仍然是 true , 而 foo === baz 將爲 false . baz === qux 仍爲 false .app

 

二、以前有試過判斷 11和11.0是否相等(===和==)?可是等到結果是相等(true)的。緣由以下編程語言

JavaScript的數字只有一種類型 - 64位浮點數。這相似於Java的 'double'。不一樣於 其餘編程語言,這裏不須要區分整數類型,因此 1 和 1.0 是相同值。 在這章節,咱們將學習如何建立數字和使用運算符(好比加減)。

 

三、聲明變量前不須要聲明數據類型?

JavaScript是一種 「弱類型」 語言, 這意味着你不須要明確的聲明變量的數據類型。 你只需用 var 關鍵詞來暗示你正在聲明一個變量,解釋器會從上下文(和引號)得出 你用的是什麼數據類型,

 

四、javascript字符串鏈接是使用 +     php 使用 . 

 

五、編程思想

條件語句能夠用來測試。條件判斷在編程中很是重要,好比:

首先,不管程序運行使用什麼數據,全部的條件都能被用來肯定程序是否正常。如 果盲目的相信數據,你將陷入程序出錯的麻煩。若是測試有效而且所需信息格式正 確,程序就不會出錯,還會變得更穩定。採起這種預防措施的行爲被稱做防護性編 程。

 

六、獲取字符串長度和數組的元素個數的方法:.length

var charLength = 'hello world'.length;

var arrLength = [1,2,3,4,6].length;

 

七、函數的兩種形式:聲明函數和函數表達式

 

函數聲明,

sayHello();  能夠在函數聲明以前調用函數,由於javascript有一個函數聲明提早的機制。

function sayHello(){

  console.log('hello world');

}

 

函數表達式

var sayHello = function(){

  console.log('hello world');

}

 

八、javascript的對象

對象 Javascript的原始類型是 true , false , 數字, 字符串, null and undefined 。全部其餘值都是 對象 . Javascript對象包含成對的 propertyName(屬性名) : propertyValue(屬性 值) 。

建立對象的方式有兩種:

字面上:

var obj = {};

面向對象:

var obj = new Object();

 

var language = {

  name: 'JavaScript',

  isSupportedByBrowsers: true,

  createdIn: 1995,

  author:{

    firstName: 'Brendan',

    lastName: 'Eich'

  }, // 是的,對象能夠嵌套!

  getAuthorFullName: function(){

    return this.author.firstName + " " + this.author.lastName;

  } // 是的,函數能夠有值!

};

 

對象是不會被複制的。它們的傳遞靠引用。

 

var myPizza = {slices: 5};
var yourPizza = myPizza;
myPizza.slices = myPizza.slices - 1;
console.log(myPizza.slices);  //4

 

var a = {}, b = {}, c = {}; // a, b, 和 c 都引用不一樣的空對象

a = b = c = {}; // a, b, 和 c 都引用同一個空對象

 

九、原型相關的知識

每一個對象都與對象原型關聯,繼承了對象原型的屬性。

全部對象建立時都從字面量對象( {} )繼承,且都自動連接到的 Object.prototype,Object.prototype 來自JavaScript標準。

當JavaScript解釋器(在瀏覽器中一個模塊),試圖找到一個屬性,它要檢索,如 下面的代碼:

var adult = {age: 26},

  retrievedProperty = adult.age;

  // 看上一行 

首先,解釋器檢查對象有的每一個屬性。例如, adult 只有一個本身的屬性 - age 。

可是,除此以外,實際上還有幾個屬性,這是繼承自Object.prototype。

var stringRepresentation = adult.toString(); // 變量的值爲 '[object Object]'

toString 是一個 Object.prototype 的屬性, 這是繼承。它有一個函數,

返回值爲 一個對象的字符串。若是但願它返回一個更有意義的東西,

那麼你能夠將其覆蓋。 簡單的添加一個屬性到adult對象。

adult.toString = function(){

   return "I'm "+this.age;

}

若是如今調用 toString 函數,解釋器將發現一個新的對象中的屬性而後中止。

解釋器解析某個屬性時會先檢查對象本身,再進一步檢查他的原型。

要設置本身的對象爲原型而不是默認的Object.prototype,你能夠調用如下 的 Object.create :

 

var child = Object.create(adult);

/* 經過這種方式建立的對象可讓咱們輕鬆

替換默認的Object.prototype成咱們想要的。

在這裏,child的原型是adult對象。 */

child.age = 8;

/* 在此以前,child根本沒有本身的年齡屬性,

解釋器會尋找child的原型中是否有該屬性。

如今,當咱們設置了child自身年齡,解釋器

就不深刻尋找了。 注意:adult的年齡仍爲26。 */

var stringRepresentation = child.toString(); // 值爲 "I'm 8"。

/* 注意:咱們沒覆蓋child的toString屬性,

所以adult類函數不會被調用。若是adult沒有toString屬性,

那麼Object.prototype的toString類函數將被調用,

咱們將獲得"[object Object]" 而不是 "I'm 8" 。 */

 

child '的原型是 adult ,其原型爲 Object.prototype 。這一系列原型被稱爲 原型鏈。

 

十、銷燬:

delete 被用來從一個對象中 刪除一個屬性 。它將刪除對象中的一個存在屬性, 使其再也不存在於原型鏈中。

從一個對象中刪除一個屬性就是將改屬性從原型中移 出:

 

var adult = {age: 26}

  child = Object.create(adult);

  child.age = age

delete child.age;

  /* 從child中刪除age屬性,代表這以後該屬性不在被覆蓋 */

var prototypeAge = child.age;

   // 26,由於該孩子沒有本身的age屬性。

從上知,child的原型是 adult,而adult的原型是Object.prototype,child的屬性age被銷燬,那就會到它的原型中找age這個屬性,由於adult的age屬性是26,因此是26

 

十一、枚舉

枚舉 for in 語句能夠遍歷對象中全部的屬性。枚舉包括函數和原型屬性。

var fruit = { apple: 2, orange:5, pear:1 },

  sentence = 'I have ', quantity;

for (kind in fruit){  

  quantity = fruit[kind];

   sentence += quantity+' '+kind+ (quantity===1?'':'s')+ ', ';

}  // The following line removes the trailing coma.

sentence = sentence.substr(0,sentence.length-2)+'.';

  // I have 2 apples, 5 oranges, 1 pear.

 

十二、全局化

若是想開發一個模塊,它能夠在網頁上運行或也能夠運行其餘模塊,

所以你必須注 意變量名是否重複。 假設咱們正在卡開發一個計數器模塊:

  var myCounter = {

    number : 0,

    plusPlus : function(){

      this.number : this.number + 1;

     },

    isGreaterThanTen : function(){

      return this.number > 10;

    }

}

注意: 這個技巧一般配合閉包使用,以使來自外部的內部狀態不變。

模塊使用惟一一個變量名 — myCounter 。若是其餘模塊使用名字好比 number 或 isGreaterThanTen ,

這樣就會很安全,由於不會覆蓋每一個其餘的值。

 

learn javascript 中文版pdf  百度雲盤:  http://pan.baidu.com/s/1gftPLmV           kn3y      傳送門

相關文章
相關標籤/搜索