国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

ES6的rest參數(shù)和擴展運算符

ccj659 / 1311人閱讀

摘要:參數(shù)的形式為變量名擴展運算符是三個點。傳遞給函數(shù)的一組參數(shù)值,被整合成了數(shù)組。擴展運算符的應(yīng)用普通的函數(shù)調(diào)用上面代碼中,和這兩行,都是函數(shù)的調(diào)用,它們的都使用了擴展運算符。這時,擴展運算符可以將其轉(zhuǎn)為真正的數(shù)組,原因就在于對象實現(xiàn)了。

rest參數(shù)擴展運算符都是ES6新增的特性。
rest參數(shù)的形式為:...變量名擴展運算符是三個點(...)。

rest參數(shù)

rest參數(shù)用于獲取函數(shù)的多余參數(shù),這樣就不需要使用arguments對象了。rest參數(shù)搭配的變量是一個數(shù)組,該變量將多余的參數(shù)放入數(shù)組中。

function add(...values) {
  let sum = 0;
  for (var val of values) {
    sum += val;
  }
  return sum;
}

add(1, 2, 3) // 6

傳遞給 add 函數(shù)的一組參數(shù)值,被整合成了數(shù)組 values。

下面是一個 rest 參數(shù)代替arguments變量的例子。

// arguments變量的寫法
function sortNumbers() {
  return Array.prototype.slice.call(arguments).sort();
}

// rest參數(shù)的寫法
const sortNumbers = (...numbers) => numbers.sort();

rest參數(shù)和arguments對象的區(qū)別

rest參數(shù)只包含那些沒有對應(yīng)形參的實參;而 arguments 對象包含了傳給函數(shù)的所有實參。

arguments 對象不是一個真實的數(shù)組;而rest參數(shù)是真實的 Array 實例,也就是說你能夠在它上面直接使用所有的數(shù)組方法。

arguments 對象對象還有一些附加的屬性 (比如callee屬性)。

另外,使用rest參數(shù)時應(yīng)注意一下兩點:

rest 參數(shù)之后不能再有其他參數(shù)(即只能是最后一個參數(shù)),否則會報錯。

function f(a, ...b, c) { ... } // 報錯

函數(shù)的length屬性,不包括 rest 參數(shù)。

(function(a) {}).length  // 1
(function(...a) {}).length  // 0
(function(a, ...b) {}).length  // 1
擴展運算符

擴展運算符可以看做是 rest 參數(shù)的逆運算,將一個數(shù)組轉(zhuǎn)為用逗號分隔的參數(shù)序列。

console.log(...[1, 2, 3]) // 1 2 3

console.log(1, ...[2, 3, 4], 5) //1 2 3 4 5
擴展運算符的應(yīng)用 普通的函數(shù)調(diào)用
function push(array, ...items) {
  array.push(...items);
}

function add(x, y) {
  return x + y;
}

var numbers = [4, 38];
add(...numbers) // 42

上面代碼中,array.push(...items)add(...numbers)這兩行,都是函數(shù)的調(diào)用,它們的都使用了擴展運算符。該運算符將一個數(shù)組,變?yōu)閰?shù)序列。

替代 apply 方法調(diào)用函數(shù)
// ES5 的寫法
Math.max.apply(null, [14, 3, 77])

// ES6 的寫法
Math.max(...[14, 3, 77])

// 等同于
Math.max(14, 3, 77);
// ES5 的寫法
var arr1 = [0, 1, 2];
var arr2 = [3, 4, 5];
Array.prototype.push.apply(arr1, arr2);

// ES6 的寫法
var arr1 = [0, 1, 2];
var arr2 = [3, 4, 5];
arr1.push(...arr2);
合并數(shù)組
var arr1 = ["a", "b"];
var arr2 = ["c"];
var arr3 = ["d", "e"];

// ES5的合并數(shù)組
arr1.concat(arr2, arr3)  // [ "a", "b", "c", "d", "e" ]

// ES6的合并數(shù)組
[...arr1, ...arr2, ...arr3]  // [ "a", "b", "c", "d", "e" ]
與解構(gòu)賦值結(jié)合
const [first, ...rest] = [1, 2, 3, 4, 5];
first // 1
rest  // [2, 3, 4, 5]

const [first, ...rest] = [];
first // undefined
rest  // []

const [first, ...rest] = ["foo"];
first  // "foo"
rest   // []

如果將擴展運算符用于數(shù)組賦值,只能放在參數(shù)的最后一位,否則會報錯。

const [...butLast, last] = [1, 2, 3, 4, 5];  // 報錯

const [first, ...middle, last] = [1, 2, 3, 4, 5];  // 報錯
將字符串轉(zhuǎn)為數(shù)組
var str = "hello";

// ES5  
var arr1 = str.split("");  // [ "h", "e", "l", "l", "o" ] 

// ES6  
var arr2 = [...str];  // [ "h", "e", "l", "l", "o" ] 
實現(xiàn)了 Iterator 接口的對象

任何 Iterator 接口的對象,都可以用擴展運算符轉(zhuǎn)為真正的數(shù)組。

var nodeList = document.querySelectorAll("div");
var array = [...nodeList];

上面代碼中,querySelectorAll方法返回的是一個nodeList對象。它不是數(shù)組,而是一個類似數(shù)組的對象。這時,擴展運算符可以將其轉(zhuǎn)為真正的數(shù)組,原因就在于NodeList對象實現(xiàn)了 Iterator

總結(jié)

從上面的例子可以看出,rest參數(shù)使用場景應(yīng)該稍少一些,主要是處理不定數(shù)量參數(shù),可以避免arguments對象的使用。而擴展運算符的應(yīng)用就比較廣了,在實際項目中靈活應(yīng)用,能寫出更精簡的代碼。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/84073.html

相關(guān)文章

  • ES6擴展算符rest算符(6)

    摘要:擴展運算符簡介擴展運算符是三個點,可以將一個數(shù)組轉(zhuǎn)為用逗號分隔的參數(shù)序列。在實際項目中靈活應(yīng)用擴展運算符運算符,能寫出更精簡易讀性高的代碼。 1、擴展運算符簡介 擴展運算符( spread )是三個點(...),可以將一個數(shù)組轉(zhuǎn)為用逗號分隔的參數(shù)序列。 說的通俗易懂點,有點像化骨綿掌,把一個大元素給打散成一個個單獨的小元素。 showImg(https://segmentfault.c...

    Amio 評論0 收藏0
  • ES6 ...操作符

    摘要:在語法中,操作符有兩種意義剩余語法,參數(shù)和展開語法,展開數(shù)組對象,作為函數(shù)數(shù)組對象的擴展運算符。使用和參數(shù)進行操作其余參數(shù)傳給原始函數(shù)展開語法運算則可以看作是參數(shù)的逆運算。 在ES6語法中,...操作符有兩種意義:rest(剩余語法,rest參數(shù)) 和 spread(展開語法,展開數(shù)組/對象),作為函數(shù)、數(shù)組、對象的擴展運算符。 從某種意義上說,剩余語法與展開語法是相反的:剩余語法將多...

    MorePainMoreGain 評論0 收藏0
  • es6解構(gòu)賦值、擴展算符rest參數(shù)使用

    摘要:模板字符串甚至還能嵌套解構(gòu)賦值允許按照一定模式,從數(shù)組和對象中提取值,對變量進行賦值,這被稱為解構(gòu)。運算符使用場景應(yīng)該稍少一些,主要是處理不定數(shù)量參數(shù),可以避免對象的使用。 es6中較為常用的書寫風(fēng)格 為了書寫的方便,es6中提出了很多比較友好的書寫方式,其中最為常見的屬于以下幾個: 字符串模板 `abcdef${test}` 解構(gòu)賦值 let [a, b, c] = [1,...

    xuweijian 評論0 收藏0
  • es6學(xué)習(xí)筆記-函數(shù)擴展_v1.0_byKL

    摘要:學(xué)習(xí)筆記函數(shù)擴展函數(shù)參數(shù)的默認(rèn)值如果參數(shù)默認(rèn)值是變量,那么參數(shù)就不是傳值的,而是每次都重新計算默認(rèn)值表達(dá)式的值。屬性函數(shù)的屬性,返回該函數(shù)的函數(shù)名。箭頭函數(shù)詳細(xì)鏈接參考引用函數(shù)擴展 es6學(xué)習(xí)筆記-函數(shù)擴展_v1.0 函數(shù)參數(shù)的默認(rèn)值 function Point(x = 0, y = 0) { this.x = x; this.y = y; } var p = ne...

    yuanzhanghu 評論0 收藏0
  • es6 -- 默認(rèn)參數(shù)Default,不定參數(shù)Rest擴展算符Spread詳解

    摘要:將數(shù)組中的每個元素展開為函數(shù)參數(shù)擴展運算符取代方法的一個實際的例子,應(yīng)用方法,簡化求出一個數(shù)組最大元素的寫法。 歡迎訪問我的個人博客:http://www.xiaolongwu.cn 前言 記錄一下在實際開發(fā)中,很有用的三個es6的新方法 用法詳解 默認(rèn)參數(shù) function f(x, y=13) { // 如果沒有傳入y或傳入了undefined,y的默認(rèn)值為13 retur...

    Betta 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<