JavaScript數組 - 引用詳解

2021-01-07 web分享

基本數據類型詳解

在學習數組引用詳解前,我們先來看基本數據類型的詳解

舉個小例子:

我們聲明一個a = 10;

然後聲明一個函數,這個函數裡面有個參數為a

把這個參數的a改成5,a = 5; 並且再加上alert(a);

函數外我們先去alert(a);

再調用這個函數把a寫在裡面傳進去

再來一次alert(a);

我們來看一下這三次調用的結果

第一次輸出結果為10,第二次是調用的函數輸出的結果為5,第三次輸出的結果還是10

show函數調用的結果只限於這個範圍

說明:

聲明在當前函數中的變量和當前函數的形參,作用域都限制在該函數內

當函數調用結束以後,這些變量和形參可,會被釋放

我們來分解看一下

首先紅框中定義的a=10; 沒有調用函數,並且alert輸出的也是10,這個毫無疑問

在函數中,首先定義函數時,function show(a)這裡面a的值首先被賦值成10;但是我們在函數體內把這個a的值修改為了5;這時的a就為5

函數調用結束,就會被銷毀,我們最後再去alert(a);時,就會找到第一次聲明的a,即為10

這是關於基本數據類型的詳解

數組類型引用詳解

來修改一下上面的小例子:

如果按照基本數據類型的解釋

第一個alert和第三個alert應該是輸出相同的的10,20

中間的show(); 函數調用的是輸出的10,20,30,40

實際運行的結果我們來看一下

首先第一個alert輸出的是10,20沒問題

但是調用函數的alert和最後一個alert輸出的結果是相同的10,20,30,40

這是因為什麼呢?這就是因為數組是一個引用的數據類型

數組:複合數據類型/引用數據類型

注意:函數運行的內存空間是預先分配好的;一旦被分配好內存空間,就不能進行改變了

所有的複合數據類型都不直接存儲在我們的函數中,它是存儲在堆段

在堆段,我們可以想用多少內存,就隨時分配多少內存;

但是在函數中是預先分配好的,不能修改

在我們上面例子中,一開始聲明的數組10和20並不是存在一個變量中,而是存在堆段中

一個變量是存不下這些數的,更何況我們還要繼續往數組中增加數值

10和20在我們內存中是需要佔空間的,我們打個比方來說,10和20就相當於在住賓館,住賓館肯定要有房間號吧,當我們想要找到它時只需要記住房間號即可;假設10,20的房間號為888,那麼arr只需要記住這個房間號888,最終當我們訪問這個arr時,首先訪問的就是888號,然後才能找到10,20;

所以在第一次輸出的時候是10,20

然後呢我們去執行show函數,show函數中有個形參也叫arr,我們在show的函數體內對arr進行了賦值操作,實際上就是給888號房間賦值,所以函數show的arr賦值後也為888號;然後我們又給888號房間用push增加了兩個數30,40,30,40同樣也存儲在了堆段中。

所以第二次調用的show函數是10,20,30,40

當我們的show函數執行完畢後,show函數就被釋放掉了,銷毀了;但是當我們最後一個alert再去訪問arr時,arr的房間號888所對應的堆段中已經是10,20,30,40了

所以第三次alert所輸出的函數也是10,20,30,40

我們要記住,所有的複合數據類型所存儲的方式都是一個門牌號,也就是地址,再通過地址去訪問數據

即,這類型的數據我們叫做引用數據類型

理解了引用的概念後,我們就可以給冒泡排序和選擇排序就可以對他進行封裝函數

封裝排序方法

利用排序中的例子來看

將循環放在函數體內

封裝冒泡排序:

調用函數即可看到相應的排序

由於數組是引用數據類型,所以我們不需要return返回值

因為我們通過這種方式修改的數組就是原來的數組

封裝選擇排序:

將這兩個排序寫在一個新的js文件中

我們想要用到這兩個排序算法的時候就可以直接引用這個兩個函數bubble()和choose()

直接調用函數就ok

- End -

---web分享,分享的不只是web

相關焦點

  • 最強大、最牛逼的javascript視頻免費發布啦
    javascript視頻教程之第一季《ECMA5核心+設計模式》,盡請期待javascript視頻教程第二季《WEB+最佳實戰》課程目錄:1_尚學堂科技_javascript視頻教程_白賀翔_初識javascript2_尚學堂科技_javascript視頻教程_白賀翔_變量和數據類型3_尚學堂科技_javascript視頻教程_白賀翔_變量的自動轉換和語句
  • JavaScript:學會splice()數組操作
    使用javascript數組類型內置的splice方法僅需一行代碼即可輕鬆實現對數組元素進行插入、刪除、替換操作。方法名:Array.prototype.splice(index,count[,elm1,elm2...n])使用Array類型的splice方法可以對數組元素進行插入、替換、刪除。
  • JavaScript 數組操作函數總結
    注意如果參數也是數組的話,則是將全部數組當做一個元素壓入到原本的數組裡面去。pop() 函數則每次只會彈出結尾的元素,並返回彈出的元素,若是是對空組數調用 pop() 則返回undefined。如下示例,我們將創建一個數組,並把一個元素添加到數組的開頭,並返回數組的新長度:code123456789<script type="text/javascript">var arr = new Array()
  • 每日一課 | JavaScript中的數組
    JavaScript中的數組具有length屬性,該屬性返回該數組的大小。,並且未在數組中添加任何元素。 1)同時聲明和填充數組var array=[10,20,30];console.log(array);2)使用數組構造函數聲明數組:在此方法中,我們使用數組構造函數聲明數組,然後使用索引填充此數組。
  • 如何在 JavaScript 中等分數組
    將數組分為兩個相等的部分我們可以分兩步將數組分成兩半:使用length/2和Math.ceil()方法找到數組的中間索引使用中間索引和Array.splice()方法獲得數組等分的部分Math.ceil() 函數返回大於或等於一個給定數字的最小整數。
  • 什麼是JavaScript對象?如何創建並引用?這就告訴你!
    主要內容:對象的創建鍵名和鍵值對象的引用Math對象Date對象javascript的對象的鍵值可以是任何數據類型。四、對象的引用(重點)4.1 對象屬性的讀取和設置讀取對象的屬性,有兩種方法:一種是使用點運算符(.),還有一種是使用方括號運算符([])。
  • JavaScript中原生Array數組方法詳解
    JS中,數組可以通過陣列構造函數或[]字面量的方式創建。數組是一個特殊的對象,繼承自對象原型,但用typeof運算判斷時,並沒有一個特定的值,仍然返回'對象'。但使用[] instanceof Array返回true。這說明,js中存在一個類數組的對象,就像字符串對象或arguments對象。
  • javascript之常用數據類型及判斷方法
    ,今天,我們來具體重新了解下javascript中的常見數據類型以及他們的判斷方法。2.負責數據類型:包括array:數組類型;object:對象數據類型。三詳解具體數據類型知識1.number數據類型:number數據類型簡單來說就是數字類型數據,包括整數型、浮點型以及特殊的NaN,NaN表示來判斷返回的數據類型是否為數字,從而避免錯誤跳出執行。
  • 關於 JavaScript 的數組隨機排序
    (點擊上方藍字,快速關注我們)作者:oldjblog.oldj.net/2017/01/23/shuffle-an-array-in-javascript
  • JavaScript 基礎:「47」JavaScript 語言中 parseInt 函數用法詳解
    歡迎關注路條編程網站,本專題主要介紹 JavaScript 基本語法、注釋、變量聲名、各種運算符、字符串、數組及條件語句等。
  • 詳解 JavaScript 閉包
    閉包的特性閉包有三個特性:1.函數嵌套函數2.函數內部可以引用外部的參數和變量3.參數和變量不會被垃圾回收機制回收閉包的定義及其優缺點閉包 是指有權訪問另一個函數作用域中的變量的函數,創建閉包的最常見的方式就是在一個函數內創建另一個函數
  • JavaScript 基礎:「21」使用 push()和pop()方法操作數組
    歡迎關注路條編程網站,本專題主要介紹 JavaScript 基本語法、注釋、變量聲名、各種運算符、字符串、數組及條件語句等。
  • 15個必須知道的JavaScript數組方法
    原文 | https://www.ibrahima-ndaw.com/blog/15-must-known-javascript-array-methods-in
  • 新特性for-of循環,讓javascript程序語言重獲超強生命力
    在ES6中,新增特性for-of循環,javascript程序語言在for循環方面,功能更加豐富強大,重獲超強生命力!在計算機發展過程中,計算機程式語言一直被視為計算機硬體的靈魂。作為前端編程的主流程式語言,javascript語言也不例外。在javascript程序語言,新增特性for-of循環,讓循環更加簡潔直接,功能更加豐富多樣。克服了for-in循環和forEach循環的不足,給javascript語言帶來了新的活力。在本例中,定義了一個for_ofloop函數,在該函數內定義可兩個變量,一個為字符串ForArray,和一個數組forArray。
  • 走近 (javascript, 函數式)
    比如,我們需要將一個數組的每個數平方以後,找出其中的奇數,並生成新的數組。javascript 對函數式編程的支持在 javascript 中,函數是一等的,也就是說,在 javascript 中,函數本身也是一個值。
  • JavaScript 數組中 Slice 和 Splice 的區別(含視頻)
    其實可以從這個方法的名字看出來,它是用於從一個 JavaScript 數組中提取元素。不過和切蛋糕不同,從數組中提取元素不會影響原數組,原數組根本就不會變化(像是切不完的蛋糕!)要點:1、返回新數組,而原數組保持不變2、如果沒有指定  end  元素,那麼切分的數組包含從
  • JavaScript DOM 編程
    <html>  <head>    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">    <title>Untitled Document</title>    <script type="text/javascript
  • JavaScript Loop教程–如何在JavaScript中遍歷數組
    什麼是數組?上面是一個用於存儲多個值的JavaScript數組。這是數組的最簡單形式之一。它在數組內部包含4個「元素」,所有字符串。如您所見,每個元素都用逗號分隔。此示例數組包含不同品牌的汽車,並且可以用cars變量引用。
  • Excel Index函數數組與引用形式的使用方法,含引用多個區域實例
    在 Excel 中,Index函數用於返回行與列交叉處的單元格引用或單元格的數值;返回的單元格引用可以是一個單元格,也可以是一行或一列。Index函數有兩種形式,一種為數組形式,另一種為引用形式;其中數組形式只有三個參數,引用形式有四個參數;數組形式引用區域只能為一個,引用形式的引用區域可以為多個不連續的區域。
  • javaScript 數組經典布爾類型判斷問題
    題目1、 console.log([]==[]);解釋:數組也是對象,兩個數組引用地址不同,所以結果為false2、console.log(!會將後面的數組強轉換為布爾類型 數組為對象類型------>所以空數組轉換為布爾類型也為true------> ![]為false. 如果數組前無!