JavaScript中的arguments對象

来源:https://www.cnblogs.com/Joe-and-Joan/archive/2019/01/18/10288755.html
-Advertisement-
Play Games

arguments 是一個類似數組的對象, 對應於傳遞給函數的參數。 語法 arguments 描述 arguments對象是所有函數中可用的局部變數。你可以使用arguments對象在函數中引用函數的參數。此對象包含傳遞給函數的每個參數的條目,第一個條目的索引從0開始。例如,如果一個函數傳遞了三個 ...


 

arguments 是一個類似數組的對象, 對應於傳遞給函數的參數。

語法

arguments

描述

arguments對象是所有函數中可用的局部變數。你可以使用arguments對象在函數中引用函數的參數。此對象包含傳遞給函數的每個參數的條目,第一個條目的索引從0開始。例如,如果一個函數傳遞了三個參數,你可以參考它們如下:

arguments[0]
arguments[1]
arguments[2]


參數也可以被設置:

arguments[1] = 'new value';

arguments對象不是一個 Array 。它類似於數組,但除了 長度之外沒有任何數組屬性。例如,它沒有 pop 方法。但是它可以被轉換為一個真正的數組::

let args = Array.prototype.slice.call(arguments); 

let args = [].slice.call(arguments);

你還可以使用 Array.from()方法或 spread 運算符將 arguments 轉換為真正的數組:

let args = Array.from(arguments);
let args = [...arguments];

對參數使用slice會阻止某些JavaScript引擎中的優化 (比如 V8 引擎)。

如果你關心它們,嘗試通過遍歷arguments對象來構造一個新的數組。

另一種方法是使用 被忽視的/鄙視/輕視,/看不起 Array構造函數作為一個函數:

let args = (
arguments.length === 1 ? 
[arguments[0]] : 
Array.apply(null, arguments)
);

如果 Array generics 可用的話,下麵的代碼可以作為替代:

var args = Array.slice(arguments);
  • arguments 對象僅在函數內部有效,在函數外部調用 arguments 對象會出現一個錯誤。

  • arguments的typeof返回'object'。

  • console.log(typeof arguments); // 'object'

  • 可以使用索引來確定各個arguments的類型。

console.log(typeof arguments[0]); 
//這將返回單個參數的typeof。

如果你調用一個函數,當這個函數的參數數量比它顯式聲明的參數數量更多的時候,你就可以使用 arguments 對象。這個技術對於參數數量是一個可變數的函數來說比較有用。 你可以用 arguments.length 來得到參數的數量,然後可以用 arguments object 來對每個參數進行處理。 (想要得到函數簽名的參數數量, 請使用 Function.length 屬性。)

屬性

arguments.callee
// 指向當前執行的函數。

arguments.caller 
// 指向調用當前函數的函數。

arguments.length
// 指向傳遞給當前函數的參數數量。

例子

定義一個連接幾個字元串的函數

這個例子定義了一個函數來連接字元串。這個函數唯一正式聲明瞭的參數是一個字元串,該參數指定一個字元作為銜接點來連接字元串。該函數定義如下:

function myConcat(separator) {
  var args = Array.prototype.slice.call(arguments, 1);
  return args.join(separator);
}

你可以傳遞任意數量的參數到該函數,然後該函數會將每個參數作為一個條目來創建一個列表。

myConcat(", ", "red", "orange", "blue");
// returns "red, orange, blue"

myConcat("; ", "elephant", "giraffe", "lion", "cheetah");
// returns "elephant; giraffe; lion; cheetah"

myConcat(". ", "sage", "basil", "oregano", "pepper", "parsley");
// returns "sage. basil. oregano. pepper. parsley"

定義一個創建HTML列表的方法

這個例子定義了一個函數通過一個字元串來創建HTML列表。這個函數唯一正式聲明瞭的參數是一個字元。當該參數為 "u" 時,創建一個無序列表 (項目列表);當該參數為 "o" 時,則創建一個有序列表 (編號列表)。該函數定義如下:

function list(type) {
  var result = "<" + type + "l><li>";
  var args = Array.prototype.slice.call(arguments, 1);
  result += args.join("</li><li>");
  result += "</li></" + type + "l>"; // end list

  return result;
}

你可以傳遞任意數量的參數到該函數,然後該函數會將每個參數作為一個條目添加到第一個參數指定類型的列表當中。

var listHTML = list("u", "One", "Two", "Three");

/* listHTML is:

"<ul><li>One</li><li>Two</li><li>Three</li></ul>"

*/

註意

ES6中的箭頭函數沒有自己的 arguments 對象,不過在大多數情形下,rest參數可以給出一個解決方案:

let a;
const fn = (...rest) => Array.prototype.slice.call(rest, 1);
a = fn(1, 2); // [2]

 


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

-Advertisement-
Play Games
更多相關文章
  • 構造就是將結構體、類或枚舉的實例準備好以便使用的過程。這個過程包括: (1)為實例中的每個存儲屬性設置初始值。 (2)執行必要的準備和初始化工作。 實例的構造過程是通過構造器來完成的。 可以在結構體、類或枚舉中提供自定義的構造器,從而自定義實例的構造過程。 結構體的自定義構造器的基本用法 類的自定義 ...
  • 1.RegExp構造函數 ES5中有兩種情況 註意!!! ES6的改變 2.字元串的正則方法 match() 方法可在字元串內檢索指定的值,或找到一個或多個正則表達式的匹配 replace() 方法用於在字元串中用一些字元替換另一些字元,或替換一個與正則表達式匹配的子串 search() 方法用於檢 ...
  • 對部分生僻的input屬性值解釋: type="reset": 可以一鍵清空form表單裡面所有的數據 type="file": multiple="multiple' 可以同時上傳多個文件 datalist的運用: 輸入框輸入的值會自動匹配datalist下拉框的值,input的list屬性值必須 ...
  • 前言 此內容是個人學習筆記,以便日後翻閱。 非教程,如有錯誤還請指出 Webpack 打包文件 支持JS模塊化 模式: production(0配置預設), development(生產環境) 更詳細的請前往 webpack官網 安裝 npm i webpack webpack cli D 執行 w ...
  • 寫這篇文章之前,關於ubuntu14.04(Trusty)預設安裝的NodeJS版本是0.10.25百思不解(什麼鬼,哪一年的NodeJS) 寫這篇文章之時,NodeJS的LTS版本號都已經10.15.0,當然Ubuntu在2018年也都發行ubuntu18.04(我還沒打算用) 系統我可以用4年前... ...
  • 一個簡單的代碼段,用於跟蹤網站上的網頁瀏覽量,而無需添加外部庫。 也適用於使用react和vue.js等單頁應用程式。 Before Google Tag Manager + Analytics = 73kB After Snippet = 1.5kB ...
  • 101-110章總結 101. dom查詢的剩餘方法 我是第一個box1我是box1中的div 我是box1中的div 我是box1中的div 我是box1中的div 102. dom增刪改 你喜歡哪個城市? 北... ...
  • js獲取頁面完整地址: window.location.href; var s =" https://ejym.baidu.com"; var h = s.split(".")[0]; var a = h.split("//")[1]; alert(a); a的結果是:ejym ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...