日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

js 类数组arguments详解

發布時間:2023/12/10 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 js 类数组arguments详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

arguments并不是一個真正的數組,而是一個“類似數組(array-like)”的對象;

就像下面的這段輸出,就是典型的類數組對象:

[12, 23, callee: ?, Symbol(Symbol.iterator): ?]

?

一、類數組 VS 數組

相同點:

  • 都可用下標訪問每個元素
  • 都有length屬性

不同點:

  • 數組對象的類型是Array,類數組對象的類型是Object;
  • 類數組對象不能直接調用數組API;
  • 數組遍歷可以用for in和for循環,類數組只能用for循環遍歷;
function calc(){console.log(arguments); // ["sky", "moon", callee: ?, Symbol(Symbol.iterator): ?]console.log(arguments[0]); // skyconsole.log(arguments.length); // 2// arguments.pop(); // 報錯,arguments.pop is not a function }calc('sky', 'moon');

?

類數組對象轉為數組對象方法:?Array.prototype.slice.call ( arguments );

function calc(){var newArr = Array.prototype.slice.call(arguments);newArr.pop(); console.log(newArr); // ["sky"] }calc('sky', 'moon');

?

二、類數組的用法

1、實現重載(overload):當函數的參數個數不明確時,函數體根據參數的不同進行相應處理;

比如我們要實現:一個參數時,做乘法運算;二個參數時,做加法運算;

看下面代碼,我們可以這樣實現:

// 實現重載(overload) function calc(){//傳1個參數,求平方if(arguments.length == 1){return arguments[0] * arguments[0]; }//傳2個參數,求和else if(arguments.length == 2){return arguments[0] + arguments[1];} } console.log(calc(5));//25 console.log(calc(12,23));//35

?

2、實現遞歸:在函數內部反復的調用函數本身

首先我們用最原始的方法,實現數字的疊加

function calc(num){if(num <= 0){return 0;}else{return num += calc(num - 1);} }console.log(calc(3)); // 6

?

然后我們用類數組來實現同樣的功能:

arguments.callee:返回當前函數本身 function calc(num){if(num <= 0){return 0;}else{return num += arguments.callee(num - 1);} } console.log(calc(3)); // 6

?

下面舉個栗子,來說明這兩種調用的一點小區別:

如果寫成?return num += calc(num - 1) 會報錯;原因很簡單,當執行calc = null 后,calc已經不是一個函數;

但是寫成?return num += arguments.callee(num - 1) 不會報錯;因為arguments.callee指的是“當前函數”,并不是“calc”

function calc(num){console.log(arguments);if(num <= 0){return 0;}else{return num += arguments.callee(num - 1);// return num += calc(num - 1); // 報錯 Uncaught TypeError: calc is not a function } } var result = calc; calc = null; console.log(result(3));

?

注意:?arguments.callee的用法在嚴格模式下是不允許的;

Uncaught TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them

"use strict"; function calc(num){if(num <= 0){return 0;}else{return num += arguments.callee(num - 1);} } console.log(calc(3));

?

轉載于:https://www.cnblogs.com/minigrasshopper/p/8058679.html

總結

以上是生活随笔為你收集整理的js 类数组arguments详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。