JavaScript數組 - 引用詳解

2021-01-10 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對象?如何創建並引用?這就告訴你!
    主要內容:對象的創建鍵名和鍵值對象的引用Math對象Date對象學習目標:為什麼要使用對象?javascript的對象的鍵值可以是任何數據類型。var frank = {name: "Frankenstein Add",age: 18,sex: "male"ability: eat();//eat()表示函數};ps:如果一個屬性的值(ability)為函數,通常把這個屬性稱為「方法」。
  • 七天學會javascript第一天javascript介紹
    javascript介紹javascript數據類型javascript運算符javascript對象javascript Date對象javascript String對象JavaScript常用於實現一些前端效果。前些年流行的flash已經慢慢的被淘汰,js盛行起來。javascript :客戶端編程。javascript是由客戶端去解釋運行的。
  • JavaScript中的「黑話」
    而sort支持傳入一個compareFunction(a, b)的參數,其中a、b為數組中進行比較的兩個非空對象(所有空對象將會排在數組的最後),具體比較規則為:返回值小於0,a排在b的左邊返回值等於0,a和b的位置不變返回值大於0,a排在b的右邊因此利用sort即可寫一個打亂數組的方法:[1,2,3,4].sort(()=>.5-Math.random
  • JavaScript 面試中常見算法問題詳解
    JavaScript 面試中常見算法問題詳解,翻譯自 https://github.com/kennymkchan/interview-questions-in-javascript
  • 程式設計師必須掌握的 12 個 JavaScript 技能!
    本文將與大家分享 12 個實用的 JavaScript 技能,未來我也將在 Github 的 JS Tips&Tidbits 倉庫(https://github.com/nas5w/javascript-tips-and-tidbits)中持續更新此概念列表。
  • Java基礎篇——數組詳解
    Java語言提供了數組(array)的數據結構,可以解決這個問題。數組的概念一個數組是相同數據類型的元素按一定順序排列的集合。使用數組可以將同一類型的數據存儲在連續的內存位置。數組中各元素的類型相同,通過下標的方式來訪問數組中的元素,下標從0開始。
  • JavaScript入門教程
    起源javascript前身叫做livescript,sun公司推出java,netspace公司引進java的概念,重新設計livescript,並更名javascript。發明者,布蘭登.艾克,表單驗證原先要經過伺服器,伺服器壓力大,等待時間長,js僅在客戶端就可完成。是什麼是一種腳本語言,是一種輕量級的程式語言。
  • 在JavaScript中,使用replace()、test()和exec()方法匹配字符串
    JavaScript核心代碼如下:<script type="text/javascript">var str = "Hello Microsoft!"使用字符串替換的核心JavaScript代碼如下:<script type="text/javascript">var str = "一都編程,每個知識就是一個案例。"
  • 分享幾個javascript實用函數
    從本文開始小編將定期發布javascript相關的代碼集錦,每次發十個與大家分享,首先是數組篇,也許有人會說,可以用常用的lodash的等庫啊。但是小編覺得,去讀lodash源碼的人並不多吧,所以分享的代碼集錦權當一種學習了,首先開始的是數組篇,基於es6 規範allallEqual找出數組中滿足篩洗條件中的所有元素.any// 找出數組中滿足篩洗條件中的所有元素.
  • 21個JavaScript 面試中常見算法問題詳解 | 文末限時福利
    來源 :https://github.com/kennymkchan/interview-questions-in-javascript闡述下 JavaScript 中的變量提升所謂提升,顧名思義即是 JavaScript 會將所有的聲明提升到當前作用域的頂部。
  • 詳解:Python 取numpy數組的某幾行某幾列方法(含對與錯示例)
    詳解:Python 取numpy數組的某幾行某幾列方法(含對與錯示例) 今天為大家帶來的內容是Python 取numpy數組的某幾行某幾列方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,要是喜歡的話記得點讚轉發收藏不迷路哦!!!
  • 匯總一:Javascript數組的操作方法都有哪些,如何使用?
    數組是JS中重要的數據類型,但是要用好這個數據類型的運用,關鍵在於如何使用數組的方法,對數據進行靈活、準確、高效的處理。數組的操作方法基礎方法有splice、push和unshift、pop和shif、reverse、sort,更進階的方法有slice、concat、toString、split和join,下面從基礎的splice函數開始,一點點拿下數組。1 splice函數splice()函數是重點也是難點,基本功能是刪除數組元素,參數為空,則表示截取一個空數組,原數組不變。
  • 來一輪帶注釋的demo,徹底搞懂javascript中的replace函數
    javascript這門語言一直就像一位帶著面紗的美女,總是看不清,摸不透,一直專注伺服器端,也從來沒有特別重視過,直到最近幾年,javascript越來越重要,越來越通用。最近和前端走的比較近,藉此機會,好好鞏固一下相關知識點。
  • LabVIEW創建一維數組
    一維數組是最基本的數組,多維數組是在一維數組的基礎上創建的。一維數組的創建過程如下。  (1)創建數組框架。在前面板窗口控制項選板中選擇控制項「新式→數組、矩陣與簇→數組,置於前面板窗口的空白處,如圖1所示。
  • EXCEL中數組的應用專題之一:數組公式是如何輸入的
    在EXCEL的應用中,數組是經常用到的一個知識點,在實際工作中,巧妙的利用數組可以在實際的工作中可以得心應手,配合必要的函數和公式,可以讓你的工作變得簡單高效。數組公式就是可以同時進行多重計算並返回一種或多種結果的公式。比一般的公式要複雜些,理解上要和普通的公式加以區別。必要時要藉助VBA的思想來來考慮問題,因為數組公式的應用在很多的時候和VBA是一樣的。
  • NumPy的數組對象
    一、創建數組可以有多種方式創建NumPy數組:(1)使用NumPy的array函數從Python列表中創建數組,數組類型由列表中的數據類型確定;(2)使用NumPy的zeros函數創建數組元素全部為0的數組,默認情況下數組元素的類型為float64;(3)使用NumPy的ones函數創建數組元素全部為1的數組,默認情況下數組元素的類型為float64;(4)使用NumPy
  • 什麼是javascript?javascript需要學哪些內容?這篇文章告訴你!
    剩餘可以是任意字母,美元符號,下劃線和數字(3)不能使用javascript中的關鍵字(保留字)來命名變量(4)中文也可以聲明變量,不建議使用它。5.1 列印變量的數據類型:typeof請注意:NaN 的數據類型是 number數組(Array)的數據類型是 object日期(Date)的數據類型為 object
  • 了解什麼是數組,如何應用數組,只需1分鐘就可以秒變數組大神!
    Hi,大家好,有很多的小夥伴在私信提問能不能說說什麼是Excel數組,因為不了解什麼是數組,因此對數組公式感覺非常神秘和陌生。由於大部分人都對數組公式很陌生,我一直都在思考如何和大家介紹這個,讓所有人都可以學會的入門資料,鑑於此情此景,本文應景而生,希望本文對你的Excel的水平提高有幫助。同時希望大家交流有錯漏的請給予斧正。
  • 快速上手系列-C語言之數組
    2、在C語言中,數組屬於構造數據類型一個數組可以分解為多個數組元素,這些數組元素可以是基本數據類型或構造類型.按數組元素類型的不同,數組可分為數值數組、字符數組、指針數組、結構體數組等類別int a[10] = {1, 2, 3, 4, 5, 6}; //一維數組,整型數組a,有10個元素int b[4][2]={ {1, 2}, {3, 4}, {5, 6}, {
  • Excel中Index函數引用表單是怎麼使用的
    INDEX函數是返回表格或區域中的值或值的引用。數組形式時公式是這樣的:INDEX(array, row_num, [column_num])。單元格區域或數組常量;Row_num必需。選擇數組中的某行;Column_num可選。選擇數組中的某列。