一個對象的原型鏈上的所有東西都可以被其所有實例繼承哦!
1.全局對象Global: 這個Global對象跟運行環境有關。在瀏覽器運行環境中。Global就是window對象。在nodejs中。Global對象是global對象。
2.http://www.ruanyifeng.com/blog/2009/09/find_element_s_position_using_javascript.html (js獲取頁面元素的位置)
3.其宿主環境:瀏覽器 node 操控瀏覽器的能力
腳本語言:不具備開發OS的能力。
4.事件驅動(event-driven)和非阻塞式(non-blocking)設計
5.JavaScirpt是一種動態類型語言,也就是說,變量的類型沒有限制,可以賦予各種類型的值。
6.JavaScript原生提供一個Object
對象(注意起首的O
是大寫),所有其他對象都繼承自這個對象。
7.Object()方法,將任意值轉換為對象。
8.Object.keys(),Object.getOwnPropertyNames()
遍歷一個對象的屬性(但不包括繼承來的屬性名哦),返回值都是數組, 但后者還返回不可枚舉屬性名。
9.Object.create():生成一個新對象,並該對象的原型。
Object.getPrototypeOf():獲取對象的Prototype對象。
10.除了Object
對象本身的方法,還有不少方法是部署在Object.prototype
對象上的,所有Object
的實例對象都繼承了這些方法。
Object
實例對象的方法,主要有以下六個。
a:valueOf()
:返回當前對象對應的值。
b:toString()
:返回當前對象對應的字符串形式。
c:toLocaleString()
:返回當前對象對應的本地字符串形式。
d:hasOwnProperty()
:判斷某個屬性是否為當前對象自身的屬性,還是繼承自原型對象的屬性。
e:isPrototypeOf()
:判斷當前對象是否為另一個對象的原型。
f:propertyIsEnumerable()
:判斷某個屬性是否可枚舉。
11.方法覆蓋: 自定義valueOf() 覆蓋Object.prototype.valueOf
。
12.利用這個特性,可以寫出一個比typeof
運算符更准確的類型判斷函數。
http://javascript.ruanyifeng.com/stdlib/object.html
13.它的核心思想是將真實世界中各種復雜的關系,抽象為一個個對象,然后由對象之間的分工與合作,完成對真實世界的模擬。
14.“對象”是一個容器,封裝了“屬性”(property) ——》 對象的狀態
和“方法”(method)。 ——》 對象的行為
15.JavaScript語言使用構造函數(constructor)作為對象的模板。 模板 !!!!!!!!!!!!!!
16.為了與普通函數區別,構造函數名字的第一個字母通常大寫。
17.由於在嚴格模式中,函數內部的this
不能指向全局對象,默認等於undefined
,導致不加new
調用會報錯(JavaScript不允許對undefined
添加屬性)。
18.new命令的原理
a: 創建一個空對象,作為將要返回的對象實例。
b:將這個空對象的原型,指向構造函數的prototype
屬性。
c:將這個空對象賦值給函數內部的this
關鍵字。
d:開始執行構造函數內部的代碼。
構造函數執行后,會返回一個對象。
19.為了利用多核CPU的計算能力,HTML5提出Web Worker標准,允許JavaScript腳本創建多個線程,但是子線程完全受主線程控制,且不得操作DOM。所以,這個新 標准並沒有改變JavaScript單線程的本質。
20.瀏覽器假死:單線程 前面任務特耗時,后面的排隊長時間內無法得到執行。
21.Event Loop機制:
CPU和IO設備之間的讀取速度差距導致一個任務的耗時更多的取決於IO設備的讀寫。 IO設備拖后腿了!
CPU完全可以不管IO設備,掛起處於等待中的任務(當前的任務正在進行IO操作),先運行排在后面的任務。等到IO設備返回了結果,再回過頭,把掛起的任務繼續 執行下去。
22. 消息隊列(message queue)運行線程只要發現消息隊列不為空,就會取出排在第一位的那個消息,執行它對應的回調函數。
每條消息與一個回調函數相聯系,也就是說,程序只要收到這條消息,就會執行對應的函數。
23.運行以后的程序叫做“進程”(process)。
24.setTimeout
函數用來指定某個函數或某段代碼,在多少毫秒之后執行。它返回一個整數,表示定時器的編號,以后可以用來取消這個定時器。
setInterval
函數的用法與setTimeout
完全一致,區別僅僅在於setInterval
指定某個任務每隔一段時間就執行一次,也就是無限次的定時執行。
整數傳入clearTimeout和clearInterval函數,就可以取消對應的定時器。