看完這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 傳送門