第5章 引用類型---JS紅寶書書摘系列筆記

来源:http://www.cnblogs.com/jiangcheng-langzi/archive/2017/11/13/7821405.html
-Advertisement-
Play Games

在ECMAScript中,引用類型是一種數據結構,用於將數據和功能組織在一起,描述的是一類對象所具有的屬性和方法。而對象是某個特定引用類型的實例。 一、Object類型 可以通過Object構造函數創建一個創建Object實例,但常用方式是使用對象字面量表示法,這種方式可以簡化創建包含大量屬性的對象 ...


       在ECMAScript中,引用類型是一種數據結構,用於將數據和功能組織在一起,描述的是一類對象所具有的屬性和方法。而對象是某個特定引用類型的實例。

一、Object類型

       可以通過Object構造函數創建一個創建Object實例,但常用方式是使用對象字面量表示法,這種方式可以簡化創建包含大量屬性的對象的過程,需要註意的是數值屬性名會自動轉換為字元串

       訪問對象屬性有兩種方法:點表示法方括弧表示法。方括弧的優點體現在1.可以通過變數來訪問屬性、2.如果屬性名包括導致語法錯誤的字元或者保留字以及關鍵字,點表示法不太合適。但是一般建議使用點表示法訪問對象的屬性。

 

二、Array類型

       ECMAScript數組的每一項可以保存任何類型的數據,而且數組的大小是可以動態調整的,即可以隨著數據的添加自動增長以容納新的數據。

       同Object類型可以通過Object構造函數創建一個Object對象實例,我們也可以通過Array構造函數創建數組。也可以通過數組字面量表示法創建。

       訪問數組的元素時可以通過索引訪問,索引從0開始。如果要改變數組的元素也可以通過索引設置。通過數組的length屬性可以動態改變數組的大小。數組的最大長度是2的32次方-1.

       檢測數組的方法:Array.isArray(value)。

       1.轉換方法

            數組繼承的toLocaleString()、toString()、valueOf()方法,在預設情況下都會以逗號分隔的字元返回所有數組的元素。alert數組名也可以輸出數組的所有的數組項,但是這一操作還是調用了數組的toString()方法。

            數組的join()方法重現了toString()方法,但是它還可以改變分隔符。

       2.棧方法

             pop()方法:移出數組的最後一項,返回刪除項 

             push()方法:添加某變數到數組的末尾,返回新數組的長度

       3.隊列方法

             shift()方法:移出數組的第一項,返回刪除項 

             unshift()方法:添加某變數到數組的開頭,返回新數組的長度

       4.重排序方法

             reverse()方法:將數組反序   

             sort()方法:按升序排列數組項,(機制是調用每個數組項的toString()方法,然後比較進行排序),此方法可以接收一個函數(稱為比較函數),比較函數可以通過一個<0、>0或者=0的值來影響排序的結果。

            上述兩種方法均返回新數組。

       5.操作方法

            concat()方法:基於當前數組的所有項創建一個新數組,此外,這個方法還可以用於引用類型數組類型的深拷貝,就是拷貝後的數組與原來的數組完全獨立。

            slice()方法:能夠基於當前數組中的一或多個項創建一個新數組,其操作不影響原數組。接收兩個參數,表示起始和結束(不包括結束位置的項),若參數為一個,則結束預設到數組最後一位。該方法主要用於向數組的中部插入項,同時也可以利用此方法對數組                                    進行刪除、插入或者替換等操作。

            splice()方法:用於截取數組,返回一個截取下來的數組。這個方法會改變原數組。

       6.位置方法

             indexOf()和lastIndexOf()方法,查找時是使用全等操作符比較。

       7.迭代方法

             ECMAScript5定義了5種迭代方法,且這5種方法不會改變原數組。

                 every():對數組的每一項運行函數,如果該函數對每一項都返回true,則該方法返回true。

                 filter():對數組中的每一項運行函數,返回由該函數會返回true的項組成的數組。

                 forEach:本質上與使用for迴圈迭代數組一樣,沒有返回值。

                 map:對數組中的每一項運行函數,返回由函數返回結果組成的數組。

                 some:對數組中的每一項運行函數,若函數對任意一項返回true,則返回true。

      8.歸併方法

             reduce()方法和reduceRight()方法,迭代數組,接收四個參數:前一項、後一項、索引、數組對象

 

三、Date類型

        日期類型在實際生產開發中很常用。mark幾個概念。預設從1970年1月1日零時開始計算。

         Date.parse()方法:接收一個表示日期的字元串參數,返回該日期到預設的毫秒數

         Date.UTC()方法:返回結果同Date.parse()方法,它接收的參數分別是年月日時分秒毫秒,年月是必須的參數。

         Date.now()方法:返回表示調用這個方法時的日期和時間的毫秒數。如果瀏覽器不支持該方法,可以利用+操作符,即+Date.now()

         關於Date類型的方法,書上介紹很詳細,有很多,可以參考JS紅寶書P100-P102  

 

四、RegExp類型

       即正則表達式、俗稱火星文。初學JS,我是拒絕學習這個的,但是實際開發中,由於數據的複雜性,也遇到很多需要利用正則的地方。

       模式+標誌:模式由元字元組成,包括:([{\^$|)?*+.]}  標誌包括:g(全局)、i(不區分大小寫)、m(多行模式)

 

五、Function類型

      JS中每個函數都是Function類型的實例,作為引用類型同樣具有屬性和方法。函數名可以看做是一個指向函數對象的指針。註意:使用不帶圓括弧的函數名是訪問函數指針,而非調用函數。

      1.函數聲明與函數表達式

         解析器在向執行環境中載入數據時,會率先讀取函數聲明,並使其在執行任何代碼之前可以訪問。而對於函數表達式,則必須等到解析器執行到函數表達式所在的位置,它才會被解釋執行。

      2.函數作為值

         在JS中,函數名本身是變數,因此,函數可以作為值使用。這一點在回調函數callBack中經常使用到。

      3.函數內部屬性

        arguments:類數組對象,包含傳入函數中的所有參數,其屬性callee是一個指針,指向包含這個arguments對象的函數。

        this:它引用的是函數據以執行的環境對象。

        caller:保存著調用當前函數的函數的引用,如果是在全局作用域中調用當前函數,則其值為null。另外,其不能被賦值。

      4.函數屬性和方法

             length:表示函數希望接收的命名參數的個數。

             prototype:保存ECMAScript中引用類型的所有實例方法。

        函數的方法主要包括apply()和call(),它們二者的區別就是傳參的方式不同。前者接收一個運行函數的作用域和一個參數數組;後者的第二個參數則需要註意列舉參數。它們的主要作用是改變函數賴以運行的作用域。

 

六、基本包裝類型

        基本包裝類型的存在意義就是為了便於操作基本類型值,在ECMAScript中,基本包裝類型主要包括:Boolean、Number、String。

       引用類型和基本包裝類型的主要區別是對象的生存期不同。由於這個區別,不能給基本包裝類型值添加屬性和方法。

       1.Number類型

           toFixed():指定保留幾位小數

           toExponential():指數表示法

           toPrecision():指定有效數字的位數

       2.String類型

          鑒於String類型的許多方法與Array類型的方法有很多相似的,所以就不詳細介紹了,前面也有一篇關於JS字元串方法的歸納總結:JS字元串方法

 

七、單體內置對象

     (1)Global對象

         不屬於任何其他對象的屬性和方法,最終都屬於它的屬性和方法。

         1.URI編碼方法

            encodeURI():主要用於整個URI,只對空格進行編碼替換

            encodeURIComponent():主要用於對URI中的某一片段進行編碼,對所有非字母數字字元進行編碼替換

            對應的解碼方法:decodeURI()和decodeURIComponent()

         2.eval()方法

             eval()方法不推薦使用,因為容易引起惡意用戶的代碼註入。lue。

         3.Global對象的屬性

            見JS紅寶書P133表格

         4.window對象

           全局對象以訪問window對象實現。

  (2)Math對象

          Math對象的方法十分強大和實用。

          常用的如下:

          min()和max()方法:確定一組數值中的最小值和最大值

          Math.ceil():向上舍入

          Math.floor():向下舍入

          Math.round():四捨五入

          Math.random():返回大於等於0小於1的一個隨機數。求區間[min,max]的隨機數:Math.random()*max+min

          Math.abs():返回絕對值

          Math.sqrt():求平方根

         

 

  

      

 


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

-Advertisement-
Play Games
更多相關文章
  • Alt+Enter 自動添加包Ctrl+t SVN更新Ctrl+k SVN提交Ctrl + / 註釋(取消註釋)選擇的行Ctrl+Shift+F 高級查找Ctrl+Enter 補全Shift + Enter 開始新行TAB Shift+TAB 縮進/取消縮進所選擇的行Ctrl + Alt + I 自 ...
  • 程式需求: 流程圖: 好像畫的不咋地 查看代碼: #!/usr/bin/env python # _*_ coding:utf-8 _*_ # File_type:一個登錄介面 # Author:smelond import os username = "smelond"#用戶名 password ...
  • java內部類是從JDK1.1開始出現的,因此,很多人都不陌生,但是又會覺得不熟悉。原因是平時編寫代碼時可能用到的場景不多,用得最多的是在有事件監聽的情況下。所以,這裡將從四個方面做一個簡單的總結: 一.內部類基礎 在Java中,可以將一個類定義在另一個類裡面或者一個方法裡面,這樣的類稱為內部類。廣 ...
  • 之前對python的標準輸入輸出關註不多,所以在碰到flush的時候有了諸多疑惑。 本文記錄了和flush方法相關的緩衝的相關內容,供學習參考。 數據緩衝 在電腦科學中,數據緩衝(data buffer)是一個當數據需要從一個地方移到另一個地方時,用來暫時保存數據的物理區域。常見的情況是,當輸入數 ...
  • java異常的概念 執行期的錯誤(javac xxx.java) 運行期的錯誤(java xxx) 這裡講的是運行期出現的錯誤 上面這段代碼的輸出結果是3 為啥12沒列印出來呢?System.out.println(arr[4])這段帶代碼想獲取數組中的第五個元素但是沒有所以報錯了直接執行了catc ...
  • Task 的實現在 Celery 中你會發現有兩處,一處位於 celery/app/task.py,這是第一個;第二個位於 celery/task/base.py 中,這是第二個。他們之間是有關係的,你可以認為第一個是對外暴露的介面,而第二個是具體的實現!所以,我們由簡入繁,先來看看對外的介面:其實... ...
  • 系統介紹: 1.系統採用主流的 SSM 框架 jsp JSTL bootstrap html5 (PC瀏覽器使用) 2.springmvc +spring4.3.7+ mybaits3.3 SSM 普通java web(非maven, 附贈pom.xml文件) 資料庫:mysql 3.開發工具:my ...
  • 策略模式,顧名思義就是設計一個策略演算法,然後與對象拆分開來將其單獨封裝到一系列策略類中,並且它們之間可以相互替換。首先LZ舉一個例子為大家引出這一個模式。 例子:某公司的中秋節獎勵制度為每個員工發放200元,現在我們設計一個員工基類, 然後讓公司各個職位繼承它。(普通員工GeneralStaff 項 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...