摘要:參與任何數值計算的結構都是,而且。。面向人類的理性事物,而不是機器信號。達到無刷新效果。的工作原理總是指向一個對象,具體是運行時基于函數的執行環境動態綁定的,而非函數被聲明時的環境。原型對象上有一個屬性,該屬性指向的就是構造函數。
1.JS面向對象的理解
面向對象的三大特點:繼承、封裝、多態 1、JS中通過prototype實現原型繼承 2、JS對象可以通過對象冒充,實現多重繼承, 3、Object類是所有Js類的基類 4、通過function對對象進行封裝 5、通過使用arguments實現參數重載 6、ES6語法糖可以直接定義類class,繼承對象extends2.JS數據類型
1.基本數據類型: Undefined:代表一切未知的事物,啥都沒有,無法想象,代碼也就更無法去處理了。 注意:typeof(Undefined) 返回也是 Undefined。可以將Undefined賦值給任何變量或屬性,但并不意味了清除了該變量,反而會因此多了一個屬性。 Null:有那么一個概念,但沒有東西。無中似有,有中還無。雖難以想象,但已經可以用代碼來處理了。 注意:typeof(Null)返回Object,但Null并非Object,具有Null值的變量也并非object。 Boolean:是就是,非就非,沒有疑義。對就對,錯就錯,絕對明確。既能被代碼處理,也可以控制代碼的流程。 Number:線性的事物,大小和次序分明,多而不亂。便于代碼進行批量處理,也控制代碼的迭代和循環等。 注意:typeof(NaN)和typeof(Infinity)都返回number 。NaN參與任何數值計算的結構都是NaN, 而且 NaN != NaN 。Infinity / Infinity = NaN 。 String:面向人類的理性事物,而不是機器信號。人機信息溝通,代碼據此理解人的意圖等等,都靠它了。 2.引用數據類型:Object、Array、Function 3.ES6新增的數據類型 Set集合 :set與數組不同在于set中不可以有重復數據,常用于去重操作 Map: 用map可以避免鍵值必須為字符串的限制,其鍵值可以為對象、數組等 Symbol類型: 用相同的字符串對對象屬性名或方法進行命名時會發生命名沖突,而使用symbol產生的名字是不同的3.JS判斷數據類型的幾種方法
1、typeof 2、prototype 3、instanceof 4、constructor 5、Object.prototype.toString.call(a) 注意 : typeof 1 // "number" typeof "1" // "string" typeof true // "boolean" typeof Symbol(1) // "symbol" typeof {} // "object" typeof [] // "object",小坑 typeof function(){} // "function" typeof Symbol(1) // "symbol" typeof undefined // "undefined" typeof null // "object",出名的坑 區別: 1.typeof null === Object 無法判斷出function(有些瀏覽器會出錯)、array、regExp 2. instanceof主要是判斷引用類型,用來測試一個對象在其原型鏈中是否存在一個構造函數的 prototype 屬性。 3.Object.prototype.toString是對象的一個原生原型擴展函數,用來精確的區分數據類型(最保險,不容易出錯的判斷方法)4.Object對象的認知
JS中所有的對象都繼承自Object 創建一個新對象: var person = new Object(); person.name = "我有貓你沒有"; person.age = 25; constructor屬性是保存當前對象的構造函數,前面的例子中,constructor保存的就是Object方法。 hasOwnProperty方法接收一個字符串參數,該參數表示屬性名稱,用來判斷該屬性是否在當前對象實例中,而不是在對象的原型鏈中。 isPrototype方法接收一個對象,用來判斷當前對象是否在傳入的參數對象的原型鏈上4.Array數據的一些方法用法
concat() 連接兩個或更多數組 splice(index,len,[item]) 刪除元素,并向數組添加一個新元素。 Slice() 從某個已有的數組返回選定的元素 Join() 把數組的所有元素放入一個字符串,元素通過指定的分隔符進行分割 push() 在數組后添加元素,并返回新的長度 unshift() 在數組最前添加元素 pop() 刪除數組最后一個元素并返回該元素的值 reverse() 顛倒數組中元素的順序 shift() 刪除并返回數組中第一個元素 sort() 對數組元素進行排序 toSource() 返回該對象的源代碼 toString() 把數組轉換為字符串并返回結果 toLocaleString() 把數組轉換為本地數組,并返回結果 valueOf() 返回對象的原始值 數組循環的幾種方式和區別 1.map() 返回一個新數組,數組中的元素為原始數組元素調用函數處理后的值(需要直接修改數組時可使用) 2.foreach() 用于調用數組的每個元素,并將元素傳遞給回調函數,只是遍歷一次數組,不會去修改原數組(獲取數據某些內容時使用) 3.filter() 創建一個新的數組,新數組中的元素是原始數組通過檢查返回值為true的項(過濾數據時使用) 4.every() 用于檢測數組所有元素是否都符合指定條件,如果數組中檢測到有一個元素不滿足,則整個表達式返回false,且剩余元素不會再進行檢測;如果所有元素都滿足條件,則返回true 5.some() 于檢測數組中是否有元素滿足指定條件(函數),如果有一個元素滿足條件,則表達式返回true,剩余元素不再執行檢測;如果沒有滿足條件的元素,則返回false 6. reduce() 數組累加器和數組中的每個元素 (從左到右)應用一個函數,將其減少為單個值5.Function函數的理解
兩種自定義函數的方法 1.function fnName(){} 2. var fnName=function(){} 函數的返回值:1.當函數無明確返回值時,函數返回undefined。2.有返回值返回。 函數的參數列表是可變的,數據類型也是任意數據類型,JS中有一個變量,argument可以訪問所有傳到函數內部的參數。 Js支持創建動態函數,動態函數必須用Function對象來定義。 創建動態函數的基本格式: var 變量名 = new Function("參數1","參數2","參數n","執行語句"); var add = new Function("x", "y", "return(x+y)"); JavaScript不支持函數的重載。如果兩個方法名字一樣,即使參數個數不一樣,那么后面定義的就會覆蓋前面定義,調用方法時永遠是調用后定義的那個。6.Ajax請求的原理
通過XMLHttpRequest對象來向服務器發送異步請求,從服務器獲取數據。然后用JavaScript來操作DOM而更新頁面。 XMLHttpRequest是ajax的核心機制,它是IE5中首先引入的,是一種支持異步請求的技術。簡單的說,也就是JavaScript可以及時的向服務器提出請求并及時響應。而不阻塞用 戶。達到無刷新效果。由事件觸發,創建一個XMLHttpRequest對象,把HTTP方法 (POST/GET)和目標URL以及請求返回后的回調函數設置到XMLHttpRequest對象,通過 XMLHttpRequest向服務器發送請求,請求發送后繼續響應用戶的界面交互,只有等到請求真正從服務器返回的時候才調用callback()函數,對響應數據進行處理。 Function ajax(){ If(window.XMLHttpRequest){ Var xhr =new XMLHttpRequest(); }else{ Var xhr=new ActiveXObject(‘Microsoft.XMLHTTP’); } Xhr.onreadystatechange=function(){ If(xhr.readState==4){} } }7.JS閉包(Closure)
閉包就是能夠讀取其他函數內部變量的函數。由于在JavaScript語言中,只有函數的內部的子函數才能讀取局部變量,因此可以把閉包簡單理解成“定義在函數內部的函數”。所以 在本質上,閉包就是講函數內部和函數外部鏈接起來的一座橋梁。 閉包的用途:1.獲取函數內部的局部變量。2.讓這些變量始終保持在內存中。 注意:1.由于閉包會使得函數中的變量一直保存在內存中,所以不能濫用閉包,容易導致內存泄漏,影響網頁性能,解決方法就是在退出函數之前,將不再使用的變量全部刪除 (delete);2閉包會在父函數外部,改變父函數內部變量的值。所以,如果你把父函數當作對象(object)使用,把閉包當作它的公用方法(Public Method),把內部變量當 作它的私有屬性(private value),這時一定要小心,不要隨便改變父函數內部變量的值。8.this的工作原理
This總是指向一個對象,具體是運行時基于函數的執行環境動態綁定的,而非函數被聲明時的環境。 普通函數調用時,一般指向window對象; 對象方法調用時,指向該對象; 如果對象方法里有局部方法,里面的this會指向window對象; 在ES5模式下,this指向window的都會變成undefined; Apply,call時,動態改變this9.JS中繼承的幾種方法
Prototype 原型繼承 Call() Apply() //模擬extend var extend=function(target,source){ for(property in source) { if(target.hasOwnProperty(property)) { target[property]=source[property]; }else{ target.property=source[property]; } } return target; }
10.原型鏈
首先要理解原型 每個JS對象都有一個prototype原型屬性,指向該對象繼承的原型。 原型對象上有一個 constructor 屬性,該屬性指向的就是構造函數。 而實例對象上有一個 __proto__ 屬性,該屬性也指向原型對象,并且該屬性不是標準屬性,不可以用在編程中,該屬性用于瀏覽器內部使用。 原型鏈:其實就是有限的實例對象和原型之間組成有限鏈,就是用來實現共享屬性和繼承的。
11.JS中的事件機制
12.
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/92523.html
摘要:中基礎數據類型數據類型名稱數據類型說明只有一個值,即,聲明變量的初始值。只有一個值,即,表示空指針,的值是派生的值。由零或多個位字符組成只有兩個值,即和該類型使用來表示整數和浮點數。中的對象其實就是一組數據和功能的集合。 JavaScript 中基礎數據類型 數據類型名稱 數據類型說明 Undefined 只有一個值,即 undefined ,聲明變量的初始值。 Nul...
摘要:上面代碼優化后盡量使用局部變量緩存全局變量在實際開發中盡量使用局部變量緩存全局變量,因為,到一個函數多次訪問全局變量的時候,會出現一個作用域練查找的過程,全局作用域位置越深找到的時間就越久,因此這也會涉及到性能的執行速度問題。 本來想整理一篇完整的JavaScript優化知識點出來跟大家討論分享一下的,但是由于最近個人的時間比較少,所以先整理了兩個知識點,之后有時間了再繼續整理后面的。...
摘要:有興趣的朋友可自行該知識點,這里件簡單提下吧。并且可能一個點或者兩個點不注意是不會產生多大性能影響,但是從多個點進行優化后,可能產生的就會是質的飛躍了 針對js文件的加載位置 在HTML文件中,標簽是可以加在區域和區域的。這里鑒于JavaScript執行和UI渲染的單線程原因,如果js文件載入會阻塞后面對于頁面的解析過程,頁面會等到js文件完全加載并運行后才繼續執行該做的操作。那么問題...
摘要:本書主要探索函數式編程的核心思想。我們在中應用的僅僅是一套基本的函數式編程概念的子集。我稱之為輕量級函數式編程。通常來說,關于函數式編程的書籍都熱衷于拓展閱讀者的知識面,并企圖覆蓋更多的知識點。,本書統稱為函數式編程者。 原文地址:Functional-Light-JS 原文作者:Kyle Simpson - 《You-Dont-Know-JS》作者 譯者團隊(排名不分先后)...
摘要:我對知乎前端相關問題的十問十答張鑫旭張鑫旭大神對知乎上經典的個前端問題的回答。作者對如何避免常見的錯誤,難以發現的問題,以及性能問題和不好的實踐給出了相應的建議。但并不是本身有問題,被標準定義的是極好的。 這一次,徹底弄懂 JavaScript 執行機制 本文的目的就是要保證你徹底弄懂javascript的執行機制,如果讀完本文還不懂,可以揍我。 不論你是javascript新手還是老...
摘要:的翻譯文檔由的維護很多人說,阮老師已經有一本關于的書了入門,覺得看看這本書就足夠了。前端的異步解決方案之和異步編程模式在前端開發過程中,顯得越來越重要。為了讓編程更美好,我們就需要引入來降低異步編程的復雜性。 JavaScript Promise 迷你書(中文版) 超詳細介紹promise的gitbook,看完再不會promise...... 本書的目的是以目前還在制定中的ECMASc...
閱讀 1074·2021-11-16 11:45
閱讀 2708·2021-09-27 13:59
閱讀 1314·2021-08-31 09:38
閱讀 3142·2019-08-30 15:52
閱讀 1315·2019-08-29 13:46
閱讀 2085·2019-08-29 11:23
閱讀 1631·2019-08-26 13:47
閱讀 2476·2019-08-26 11:54