JavaScript標準參考教材(alpha)--筆記

来源:http://www.cnblogs.com/colima/archive/2016/08/07/5714754.html
-Advertisement-
Play Games

一、導論 二、基本語法 1、嚴格來說var a=1與a=1效果不太一樣,delete命令無法刪除前者。 JavaScirpt是一種動態類型語言,也就是說,變數的類型沒有限制,可以賦予各種類型的值。 JavaScript引擎的工作方式是,先解析代碼,獲取所有被聲明的變數,然後再一行一行地運行。中文是合 ...


一、導論

二、基本語法

    1、嚴格來說var a=1與a=1效果不太一樣,delete命令無法刪除前者。

        JavaScirpt是一種動態類型語言,也就是說,變數的類型沒有限制,可以賦予各種類型的值。

        JavaScript引擎的工作方式是,先解析代碼,獲取所有被聲明的變數,然後再一行一行地運行。中文是合法的標識符,可以用作變數名。

        switch語句後面的表達式與case語句後面的表示式,在比較運行結果時,採用的是嚴格相等運算符(===)。swidth結構不利於代碼重用,往往可以用對象形式重寫。

         do...while語句中,while後的分號不能省略。

         typeof(null)=='object',typeof(undefined)=='undefined',null==undefined,null轉數值是0,undefined轉數值是NaN。 
    2、JavaScript內部,所有數字都是以64位浮點數形式儲存,

         +0===-0,唯一有區別的場合是,+0-0當作分母,返回的值是不相等的,0/0返回NaN,NaN類型number,NaN===NaN為false。isFinite函數返回一個布爾值,檢查某個值是不是正常數值,而不是Infinite。

    3、Base64是一種編碼方法,可以將任意字元轉成可列印字元。使用這種編碼方法,主要不是為了加密,而是為了不出現特殊字元,簡化程式的處理。btoa():字元串或二進位值轉為Base64編碼,atob():Base64編碼轉為原來的編碼。要將非ASCII碼字元轉為Base64編碼,必須中間插入一個轉碼環節encodeURIComponent(str),再使用這兩個方法。

    4、對象中鍵名不符合標識名的條件,則必須加上引號。JavaScript的保留字可以不加引號當作鍵名。

        如果不同的變數名指向同一個對象,那麼它們都是這個對象的引用,也就是說指向同一個記憶體地址。修改其中一個變數,會影響到其他所有變數。但是,這種引用只局限於對象,對於原始類型的數據則是傳值引用,也就是說,都是值的拷貝。

        檢查變數是否聲明:if('a' in window){}else{}。

        查看所有屬性:Object.keys(o)。

       delete命令只能刪除對象本身的屬性,無法刪除繼承的屬性,不能刪除var命令聲明的變數,只能用來刪除屬性。

       with的作用是操作同一個對象的多個屬性時,提供一些書寫的方便。

    5、任何類型的數據,都可以放入數組。將數組清空的一個有效方法,就是將length屬性設為0。

        數組的slice方法將類似數組的對象,變成真正的數組:Array.prototype.slice.call(arrayLike)。

        數組的某個位置是空位,與某個位置是undefined,是不一樣的。如果是空位,使用數組的forEach方法、for...in結構、以及Object.keys方法進行遍歷,空位都會被跳過。

    6、JavaScript引擎將函數名視同變數名,所以採用function命令聲明函數時,整個函數會像變數聲明一樣,被提升到代碼頭部。如果同時採用function命令和賦值語句聲明同一個函數,最後總是採用賦值語句的定義。

         對於var命令來說,局部變數只能在函數內部聲明,在其他區塊中聲明,一律都是全局變數。

         如果函數A調用函數B,函數B不會引用函數A的內部變數。函數體內部聲明的函數,作用域綁定函數體內部。

         函數參數如果是原始類型按值傳遞,如果是複合類型按地址傳遞,如果函數內部修改的,不是參數對象的某個屬性,而是替換掉整個參數,這時不會影響到原始值。

        閉包就是函數能夠讀取其他函數內部變數的函數。閉包作用:讀取函數內部變數,讓這些變數始終保存在記憶體中,封裝對象的私有屬性和私有方法。

    7、否運算(~)

    8、Number:調用對象自身的valueOf方法。如果返回原始類型的值,則直接對該值使用Number函數,不再進行後續步驟。如果valueOf方法返回的還是對象,則改為調用對象自身的toString方法。如果返回原始類型的值,則對該值使用Number函數,不再進行後續步驟。如果toString方法返回的是對象,就報錯。

        String:先調用對象自身的toString方法。如果返回原始類型的值,則對該值使用String函數,不再進行以下步驟。如果toString方法返回的是對象,再調用valueOf方法。如果返回原始類型的值,則對該值使用String函數,不再進行以下步驟。如果valueOf方法返回的是對象,就報錯。

        Boolean:undefined null -0 0或+0 NaN ''(空字元串)為false,其餘為true。

    9、Error構造函數,所有拋出的錯誤都是這個構造函數的實例。

        原生錯誤類型:SyntaxEror(語法錯誤),ReferenceError(引用一個不存在的變數),RangeError(值超出範圍),TypeError,URIError,EvalError。

        如果沒有發生錯誤,則運行finally代碼塊關閉文件;一旦發生錯誤,則先使用catch代碼塊處理錯誤,再使用finally代碼塊關閉文件。

    10、避免使用全局變數。如果不得不使用,用大寫字母表示變數名。

        所有函數都應該在使用之前定義,函數內部的變數聲明,都應該放在函數的頭部。

        建議使用Object.create()命令,替代new命令。

        不要使用“相等”(==)運算符,只使用“嚴格相等”(===)運算符。

        建議自增(++)和自減(--)運算符儘量使用+=-=代替。

        建議避免使用switch...case結構,用對象結構代替。

三、標準庫

    1、Object.keys方法只返回可枚舉的屬性,Object.getOwnPropertyNames方法還返回不可枚舉的屬性名。

        var type = function (o){var s = Object.prototype.toString.call(o);return s.match(/\[object (.*?)\]/)[1].toLowerCase();};比typeof更準確。

    2、concat方法返回當前數組的一個淺拷貝。所謂“淺拷貝”,指的是如果數組成員包括複合類型的值(比如對象),則新數組拷貝的是該值的引用。

         push方法還可以用於向對象添加元素,添加後的對象變成類似數組的對象,即新加入元素的鍵對應數組的索引,並且對象有一個length屬性。[].push.call(a,1)。

         slice方法的一個重要應用,是將類似數組的對象轉為真正的數組。Array.prototype.slice.call({...})。

         map方法對數組的所有成員依次調用一個函數,根據函數結果返回一個新數組。map通過call方法還可以用於字元串。

    3、valueOf()返回包裝對象實例對應的原始類型的值。toString()返回實例對應的字元串形式。

         原始類型的值,可以自動當作對象調用,即調用各種對象的方法和參數。這時,JavaScript引擎會自動將原始類型的值轉為包裝對象,在使用後立刻銷毀。

    4、Number:toString(),toFixed()小數位數,toExponential()科學計數法,toPrecision()指定位數的有效數字。 

    5、String:用slice代替substring。search方法的用法等同於match,但是返回值為匹配的第一個位置。

    6、Math.round(-1.5)。返回隨機字元串:

1 function random_str(length) {
2   var a = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
3   var str = '';
4   for (var i=0; i < length; ++i) {
5     var rand = Math.floor(Math.random() * a.length);
6     str += a.slice(rand, rand + 1);
7   }
8   return str;
9 }

    7、Date:getYear():返回距離1900的年數。valueOf方法返回實例對象距離1970年1月1日00:00:00 UTC對應的毫秒數,該方法等同於getTime方法。

    8、正則:regex.test(string)返回布爾值。regex.exec(string)返回數組,有lastIndex屬性。string.match(regex)不匹配返回null。search返回第一個滿足條件的匹配結果在整個字元串中的位置,否則-1。

    9、JSON:JSON.stringify,JSON.parse方法用於將JSON字元串轉化成對象

    10、console

    11、屬性描述對象

四、面向對象編程

    1、JavaScript的對象體系是基於構造函數(constructor)和原型鏈(prototype)的。使用構造函數(constructor)作為對象的模板(首字母大寫)。

    new命令的作用,就是執行構造函數,返回一個實例對象。new命令總返回一個對象。

        如果構造函數內部有return語句,而且return後面跟著一個對象,new命令會返回return語句指定的對象;否則,就會不管return語句,返回this對象。

    2、this

        在全局環境使用this,它指的就是頂層對象window。構造函數中的this,指的是實例對象。當A對象的方法被賦予B對象,該方法中的this就從指向A對象變成了指向B對象。

    3、prototype

        原型對象的作用,就是定義所有實例對象共用的屬性和方法。

        constructor屬性的作用,是分辨原型對象到底屬於哪個構造函數。

        instanceof運算符用來比較一個對象是否為某個構造函數的實例。

        Object.getPrototypeOf方法返回一個對象的原型。

        Object.setPrototypeOf方法可以為現有對象設置原型,返回一個新對象。

        對象實例的isPrototypeOf方法,用來判斷一個對象是否是另一個對象的原型。

    4、Object對象與繼承

    5、面向對象編程的模式

五、DOM(未看)

    1、對於HTML文檔,節點主要有以下六種類型:Document節點、DocumentType節點、Element節點、Attribute節點、Text節點和DocumentFragment節點。

六、瀏覽器環境

    1、瀏覽器核心:渲染引擎和JavaScript引擎,

        如果腳本之間沒有依賴關係,就使用async屬性,如果腳本之間有依賴關係,就使用defer屬性。如果同時使用asyncdefer屬性,後者不起作用,瀏覽器行為由async屬性決定。

        重流必然導致重繪,重繪不一定需要重流。

        根據頁面本身的協議來決定載入協議,這時可以採用下麵的寫法。<script src="//example.js"></script>

    2、window.location === document.location。

    URL編碼:encodeURI(),encodeURIComponent(),decodeURI(),decodeURIComponent()。

    3、history.back()返回上一頁(從瀏覽器緩存中載入)。

        URLSearchParams API用於處理URL之中的查詢字元串,即問號之後的部分。

        URLSearchParams還可以與URL介面結合使用。var url = new URL(location);url.searchParams就是URLSearchParams {}對象。

    4、每個Cookie的大小一般不能超過4KB。

        Cookie保存以下幾方面的信息:Cookie的名字,Cookie的值,到期時間,所屬功能變數名稱(預設是當前功能變數名稱),生效的路徑(預設是當前網址)。

        window.navigator.cookieEnabled屬性返回一個布爾值,表示瀏覽器是否打開Cookie功能。document.cookie屬性返回當前網頁的Cookie。

        兩個網址只要功能變數名稱相同和埠相同,就可以共用Cookie。

    5、sessionStorage和localStorage。

        JSONP:網頁通過添加一個<script>元素,向伺服器請求JSON數據,這種做法不受同源政策限制;伺服器收到請求後,將數據放在一個指定名字的回調函數里傳回來。

        WebSocket是一種通信協議,使用ws://(非加密)和wss://(加密)作為協議首碼。

    6、瀏覽器將CORS請求分成兩類:簡單請求(simple request)和非簡單請求(not-so-simple request)。

        JSONP只支持GET請求,CORS支持所有類型的HTTP請求。

    7、Notification API是瀏覽器的通知介面,用於在用戶的桌面(而不是網頁上)顯示通知信息。

    8、Performance API用於精確度量、控制、增強瀏覽器的性能表現。

七、語法專題:

    1、JavaScript引擎有多個線程,單個腳本只能在一個線程上運行,其他線程都是在後臺配合。

        為了利用多核CPU的計算能力,HTML5提出Web Worker標準,允許JavaScript腳本創建多個線程,但是子線程完全受主線程式控制制,且不得操作DOM。

        所謂Event Loop機制,指的是一種內部迴圈,用來一輪又一輪地處理消息隊列之中的消息,即執行對應的回調函數。(非同步模式)

        所有任務分為同步任務和非同步任務。

    2、如果被setTimeout推遲執行的回調函數是某個對象的方法,那麼該方法中的this關鍵字將指向全局環境。

        setIntervel具有累積效應。

    3、Promise是JavaScript非同步操作解決方案。

    4、嚴格模式

 以上筆記總結自—— http://javascript.ruanyifeng.com/ 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 安裝Gulp.js Gulp是給予Node.js的,故首先安裝Node.js[1],完成之後執行下麵的命令安裝Gulp: npm install -g gulp //-g (global)執行全局安裝gulp,這樣在任何地方都可以進行 gulp 操作 安裝完成之後,需要在我們的項目中使用,需要命令行 ...
  • var obj1={apple:0,banana:{weight:52,price:100},cherry:97}; $.exytend(obj1); $.cherry >97 $.apple >0 $.banana >{weight:52,price:100} var obj2={banana:{ ...
  • animation-fill-mode是css3動畫的一個屬性,它能夠控制元素在動畫執行前與動畫完成後的樣式。一個帶有延遲,並且按正常方向執行的動畫(正常方向是指從0%運行到100%),執行一次的過程可以描述如下: 按照動畫的執行時間來劃分,一次動畫過程可以將元素劃分為3個狀態:動畫等待,動畫進行和... ...
  • Covering-Bad 是一個可拉動大小的元素,覆蓋在原有的元素上面,從而兩者進行對比。 線上實例 實例演示1 實例演示2 使用方法 複製 參數詳解 下載 ...
  • 引言: 在項目中不同頁面經常要用到已經寫好的交互,比如彈窗,比如下拉菜單,比如選項卡,比如刪除... 此時如果每次都把代碼copy一份無疑是一件比較麻煩並且無趣的事情,而且個人認為有些low了,我們可是要追尋 高大上的90後有為青年呢~可是該如何高大上呢?這時jQuery自定義插件開發來了,第一次聽 ...
  • JavaScript 的語法大量借鑒了 C 及其他類 C 語言(如 Java 和 Perl)的語法。因此,熟悉這些語言的開發人員在接受 JavaScript 更加寬鬆的語法時,一定會有種輕鬆自在的感覺。本章主要按照 ECMAScript 3 介紹這門語言的基本概念,並就 ECMAScript 5 的 ...
  • 作者:禪樓望月( http://www.cnblogs.com/yaoyinglong ) 隊列是一種特殊的線性表,它的特殊之處在於他只允許在頭部進行刪除,在尾部進行插入。常用來表示先進先出的操作(FIFO)--先進隊列的元素先出隊。搜索整個jQuery庫會發現,queue在jQuery內部僅供給a... ...
  • 一、引言 初步認識DOM有可能會被各種不熟悉的因為因素影響自己的學習心態,你需要的是多去記憶一些單詞然後加強自己的代碼量。 二、導入 在昨天初步認識DOM以後我們見天將接著介紹有關於DOM的內容。 三、重點內容 ① 獲得或設置頁面的內容(innerText與innerHTML): 區別: a. 在獲 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...