JavaScript中的arguments對象

JavaScript中的arguments對象

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]

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/541519.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/541519.shtml
英文地址,請注明出處:http://en.pswp.cn/news/541519.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mongodb 排序_技術分享 | MongoDB 一次排序超過內存限制的排查

本文目錄&#xff1a;一、背景1. 配置參數檢查2. 排序字段是否存在索引二、測試環境模擬索引對排序的影響1. 測試環境信息2. 報錯語句的執行計劃解釋 3. 建立新的組合索引進行測試三、引申的組合索引問題1. 查詢語句中&#xff0c;排序字段 _id 使用降序2. 查詢語句中&#xff…

sim800 模式切換_SIM的完整形式是什么?

sim800 模式切換SIM&#xff1a;訂戶標識模塊或訂戶標識模塊 (SIM: Subscriber Identity Module or Subscriber Identification Module) SIM is an abbreviation of a Subscriber Identity Module or Subscriber Identification Module. SIM is a portable chip and an integra…

css新單位 vw , vh

考慮到未來響應式設計的開發&#xff0c;如果你需要&#xff0c;瀏覽器的高度也可以基于百分比值調整。但使用基于百分比值并不總是相對于瀏覽器窗口的大小定義的最佳方式&#xff0c;比如字體大小不會隨著你窗口改變而改變&#xff0c;如今css3引入的新單位明確解決這一問題。…

linux下mysql目錄結構_linux下mysql安裝配置與目錄結構

本節內容&#xff1a;linux下mysql安裝與配置、mysql目錄結構。1、準備安裝程序(官方網站下載)服務端&#xff1a;MySQL-server-community-5.1.44-1.rhel4.i386.rpm客戶端&#xff1a;MySQL-client-community-5.1.44-1.rhel4.i386.rpm2、安裝(打印信息略) 代碼示例:[rootlocalh…

Python字典values()方法與示例

字典values()方法 (Dictionary values() Method) values() method is used to get all values of a dictionary, it returns a view object that contains the all values of the dictionary as a list. values()方法用于獲取字典的所有值&#xff0c;它返回一個包含字典所有值…

spark源碼分析之Executor啟動與任務提交篇

任務提交流程 概述 在闡明了Spark的Master的啟動流程與Worker啟動流程。接下繼續執行的就是Worker上的Executor進程了&#xff0c;本文繼續分析整個Executor的啟動與任務提交流程Spark-submit 提交一個任務到集群通過的是Spark-submit通過啟動腳本的方式啟動它的主類&#xff0…

mysql 5.5.22.tar.gz_MySQL 5.5.22源碼編譯安裝

MySQL 最新的版本都需要cmake編譯安裝&#xff0c;估計以后的版本也會采用這種方式&#xff0c;所以特地記錄一下安裝步驟及過程&#xff0c;以供參考。注意&#xff1a;此安裝是默認CentOS下已經安裝了最新工具包&#xff0c;比如GNU make, GCC, Perl, libncurses5-dev&#x…

Java Vector setElementAt()方法與示例

向量類setElementAt()方法 (Vector Class setElementAt() method) setElementAt() method is available in java.util package. setElementAt()方法在java.util包中可用。 setElementAt() method is used to set the given element (ele) at the given indices in this Vector.…

利用python進行數據分析D2——ch03IPython

為無為,事無事,味無味。大小多少,報怨以德。圖難于其易,為大于其細;天下難事必作于易,天下大事必作于細。——老子關于圖片的例子&#xff1a;import matplotlib.pyplot as plt imgplt.imread(ch03/stinkbug.png) import pylab plt.imshow(img) pylab.show()結果&#xff1a;調…

mysql 視圖 字典_MySQL深入01-SQL語言-數據字典-服務器變量-數據操作DML-視圖

SQL語言的組成部分常見分類&#xff1a;DDL&#xff1a;數據定義語言DCL&#xff1a;數據控制語言&#xff0c;如授權DML&#xff1a;數據操作語言其它分類&#xff1a;完整性定義語言&#xff1a;DDL的一部分功能約束約束&#xff1a;包括主鍵&#xff0c;外鍵&#xff0c;唯一…

為什么我會被淘汰?

這是一個值得討論的問題。華為前段時間也傳出了大規模裁員的一些負面新聞&#xff0c;一時間搞的人心惶惶。總結起來說&#xff0c;還是怕失去這份賴以生存的工作&#xff0c;尤其是對于上有老下有小的中年人來說&#xff0c;工作尤為重要。 淘汰&#xff0c;是軟件行業不變的真…

Java Throwable initCause()方法與示例

Throwable類initCause()方法 (Throwable Class initCause() method) initCause() Method is available in java.lang package. initCause()方法在java.lang包中可用。 initCause() Method is used to instantiate the cause of this throwable to the given value and this met…

mysql 存儲過程死循環_pl/sql存儲過程loop死循環

今早&#xff0c;一個存儲過程&#xff0c;寫過很多次的存儲過程&#xff0c;隨手一寫&#xff0c;各種報錯&#xff0c;各種糾結&#xff0c;網上一搜&#xff0c;有好多個都遇到&#xff0c;論壇上給出的結局答案&#xff0c;今早&#xff0c;一個存儲過程&#xff0c;寫過很…

GATK之VariantAnnotator

VariantAnnotator 簡要說明 用途&#xff1a; 利用上下文信息注釋識別的變異位點(variant calls)分類&#xff1a; 變異位點操作工具概要&#xff1a; 根據變異位點的背景信息&#xff08;與功能注釋相對&#xff09;進行注釋。目前有許多的注釋模塊&#xff08;見注釋模塊一節…

pipedreader_Java PipedReader connect()方法與示例

pipedreaderPipedReader類的connect()方法 (PipedReader Class connect() method) connect() method is available in java.io package. connect()方法在java.io包中可用。 connect() method is used to cause this PipedReader to be connected to the given PipedWriter (sou…

《Java學習指南》—— 1.4 設計安全

本節書摘來異步社區《Java學習指南》一書中的第1章&#xff0c;第1.4節&#xff0c;作者&#xff1a;【美】Patrick Niemeyer , Daniel Leuck&#xff0c;更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 1.4 設計安全 Java被設計為一種安全語言&#xff0c;對于這一事實…

ppython_Python pcom包_程序模塊 - PyPI - Python中文網

PCOM在python中一個非常基本的unitronics pcom協議實現。如何使用from pcom import commandsfrom pcom.plc import EthernetPlcwith EthernetPlc(address(192.168.5.43, 1616)) as plc:# Read realtime clockc commands.ReadRtc()res plc.send(c)print(res)# Set realtime cl…

bitcount方法詳解_Java Long類的bitCount()方法和示例

bitcount方法詳解長類bitCount()方法 (Long class bitCount() method) bitCount() method is available in java.lang package. bitCount()方法在java.lang包中可用。 bitCount() method is used to find the number of 1s bits in the 2s complement binary denotation of the…

《軟件定義數據中心:Windows Server SDDC技術與實踐》——導讀

前言 通過對自身的審視和對身邊IT 技術專家的觀察&#xff0c;我發現對于我們來說&#xff0c;掌握一項新的技術或熟悉一個新的產品&#xff0c;大都是聞而后知&#xff0c;知而后學&#xff0c;學以致用&#xff0c;用以知其然。然而Windows Server作為一個簡單的、易上手的操…

python二維向量運算模擬_python二維向量運算_[VB.NET][C#]二維向量的基本運算

前言在數學中&#xff0c;幾何向量是指具有大小和方向的幾何對象。在編程中&#xff0c;向量有著廣泛的應用&#xff0c;其作用在圖形編程和游戲物理引擎方面尤為突出。第一節 構造函數通過創建一個二維向量的類(或結構體)&#xff0c;實現向量的表示及其運算。1. 首先&#xf…