Baseline Widely available
spread (...
) è¯æ³å
许è¿ä»£æ°ç»æå符串çå¯è¿ä»£å符串å¨é¢ææé¶ä¸ªææ´å¤åæ°ï¼ç¨äºå½æ°è°ç¨ï¼æå
ç´ ï¼ç¨äºæ°ç»åé¢éï¼çå°æ¹è¿è¡æ©å±ãå¨å¯¹è±¡åé¢éä¸ï¼æ©å±è¯æ³æä¸¾å¯¹è±¡ç屿§ï¼å¹¶å°é®å¼å¯¹æ·»å å°æ£å¨å建ç对象ä¸ã
å±å¼è¯æ³çèµ·æ¥ä¸å©ä½åæ°è¯æ³ä¸æ¨¡ä¸æ ·ã卿ç§ç¨åº¦ä¸ï¼æ©å±è¯æ³ä¸å©ä½åæ°è¯æ³æ£å¥½ç¸åãæ©å±è¯æ³æ¯å°æ°ç»âæ©å±â为å ç´ ï¼èå ¶ä½è¯æ³æ¯å°å¤ä¸ªå ç´ æ¶éèµ·æ¥ï¼ç¶åâæµç¼©â为ä¸ä¸ªå ç´ ã请åé å©ä½åæ°åå©ä½å±æ§ ã
å°è¯ä¸ä¸function sum(x, y, z) {
return x + y + z;
}
const numbers = [1, 2, 3];
console.log(sum(...numbers));
// Expected output: 6
console.log(sum.apply(null, numbers));
// Expected output: 6
è¯æ³
myFunction(a, ...iterableObj, b)
[1, ...iterableObj, '4', 'five', 6]
{ ...obj, key: 'value' }
ç¤ºä¾ å¨å½æ°è°ç¨æ¶ä½¿ç¨å±å¼è¯æ³ çä»·äº apply çæ¹å¼
妿æ³å°æ°ç»å
ç´ è¿ä»£ä¸ºå½æ°åæ°ï¼ä¸è¬ä½¿ç¨Function.prototype.apply
çæ¹å¼è¿è¡è°ç¨ã
function myFunction(x, y, z) {}
var args = [0, 1, 2];
myFunction.apply(null, args);
æäºå±å¼è¯æ³ï¼å¯ä»¥è¿æ ·åï¼
function myFunction(x, y, z) {}
var args = [0, 1, 2];
myFunction(...args);
ææåæ°é½å¯ä»¥éè¿å±å¼è¯æ³æ¥ä¼ å¼ï¼ä¹ä¸éå¶å¤æ¬¡ä½¿ç¨å±å¼è¯æ³ã
function myFunction(v, w, x, y, z) {}
var args = [0, 1];
myFunction(-1, ...args, 2, ...[3]);
å¨ new 表达å¼ä¸åºç¨
ä½¿ç¨ new
å
³é®åæ¥è°ç¨æé 彿°æ¶ï¼ä¸è½ç´æ¥ä½¿ç¨æ°ç» + apply
çæ¹å¼ï¼apply
æ§è¡çæ¯è°ç¨ [[Call]]
, è䏿¯æé [[Construct]]
ï¼ãå½ç¶ï¼æäºå±å¼è¯æ³ï¼å°æ°ç»å±å¼ä¸ºæé 彿°çåæ°å°±å¾ç®åäºï¼
var dateFields = [1970, 0, 1]; // 1970 å¹´ 1 æ 1 æ¥
var d = new Date(...dateFields);
妿ä¸ä½¿ç¨å±å¼è¯æ³ï¼æ³å°æ°ç»å ç´ ä¼ ç»æé 彿°ï¼å®ç°æ¹å¼å¯è½æ¯è¿æ ·çï¼
function applyAndNew(constructor, args) {
function partial() {
return constructor.apply(this, args);
}
if (typeof constructor.prototype === "object") {
partial.prototype = Object.create(constructor.prototype);
}
return partial;
}
function myConstructor() {
console.log("arguments.length: " + arguments.length);
console.log(arguments);
this.prop1 = "val1";
this.prop2 = "val2";
}
var myArguments = ["hi", "how", "are", "you", "mr", null];
var myConstructorWithArguments = applyAndNew(myConstructor, myArguments);
console.log(new myConstructorWithArguments());
// (myConstructor æé 彿°ä¸): arguments.length: 6
// (myConstructor æé 彿°ä¸): ["hi", "how", "are", "you", "mr", null]
// ("new myConstructorWithArguments"ä¸): {prop1: "val1", prop2: "val2"}
æé åé¢éæ°ç»æ¶ä½¿ç¨å±å¼è¯æ³ æé åé¢éæ°ç»æ¶æ´ç»åï¼
没æå±å¼è¯æ³çæ¶åï¼åªè½ç»åä½¿ç¨ push
, splice
, concat
çæ¹æ³ï¼æ¥å°å·²ææ°ç»å
ç´ åææ°æ°ç»çä¸é¨åãæäºå±å¼è¯æ³ï¼éè¿åé¢éæ¹å¼ï¼æé æ°æ°ç»ä¼å徿´ç®åãæ´ä¼é
ï¼
var parts = ["shoulders", "knees"];
var lyrics = ["head", ...parts, "and", "toes"];
// ["head", "shoulders", "knees", "and", "toes"]
ååæ°å表çå±å¼ç±»ä¼¼ï¼ ...
卿é åé¢éæ°ç»æ¶ï¼å¯ä»¥å¨ä»»æä½ç½®å¤æ¬¡ä½¿ç¨ã
var arr = [1, 2, 3];
var arr2 = [...arr]; // like arr.slice()
arr2.push(4);
// arr2 æ¤æ¶åæ [1, 2, 3, 4]
// arr ä¸åå½±å
æç¤ºï¼ å®é
ä¸ï¼å±å¼è¯æ³å Object.assign()
è¡ä¸ºä¸è´ï¼æ§è¡ç齿¯æµ
æ·è´ (åªéåä¸å±)ã妿æ³å¯¹å¤ç»´æ°ç»è¿è¡æ·±æ·è´ï¼ä¸é¢ç示ä¾å°±æäºé®é¢äºã
var a = [[1], [2], [3]];
var b = [...a];
b.shift().shift(); // 1
// Now array a is affected as well: [[], [2], [3]]
è¿æ¥å¤ä¸ªæ°ç»
Array.concat
彿°å¸¸ç¨äºå°ä¸ä¸ªæ°ç»è¿æ¥å°å¦ä¸ä¸ªæ°ç»çåé¢ã妿ä¸ä½¿ç¨å±å¼è¯æ³ï¼ä»£ç å¯è½æ¯ä¸é¢è¿æ ·çï¼
var arr1 = [0, 1, 2];
var arr2 = [3, 4, 5];
// å° arr2 䏿æå
ç´ éå å° arr1 åé¢å¹¶è¿å
var arr3 = arr1.concat(arr2);
使ç¨å±å¼è¯æ³ï¼
var arr1 = [0, 1, 2];
var arr2 = [3, 4, 5];
var arr3 = [...arr1, ...arr2];
Array.unshift
æ¹æ³å¸¸ç¨äºå¨æ°ç»çå¼å¤´æå
¥æ°å
ç´ /æ°ç»ãä¸ä½¿ç¨å±å¼è¯æ³ï¼ç¤ºä¾å¦ä¸ï¼
var arr1 = [0, 1, 2];
var arr2 = [3, 4, 5];
// å° arr2 ä¸çå
ç´ æå
¥å° arr1 çå¼å¤´
Array.prototype.unshift.apply(arr1, arr2); // arr1 ç°å¨æ¯ [3, 4, 5, 0, 1, 2]
å¦æä½¿ç¨å±å¼è¯æ³ï¼ä»£ç å¦ä¸ï¼[请注æï¼è¿é使ç¨å±å¼è¯æ³å建äºä¸ä¸ªæ°ç arr1
æ°ç»ï¼ Array.unshift
æ¹æ³åæ¯ä¿®æ¹äºåæ¬åå¨ç arr1
æ°ç»]:
var arr1 = [0, 1, 2];
var arr2 = [3, 4, 5];
arr1 = [...arr2, ...arr1]; // arr1 ç°å¨ä¸º [3, 4, 5, 0, 1, 2]
æé åé¢é对象æ¶ä½¿ç¨å±å¼è¯æ³
Rest/Spread Properties for ECMAScript æè®® (stage 4) 对 åé¢é对象 å¢å äºå±å¼ç¹æ§ãå ¶è¡ä¸ºæ¯ï¼å°å·²æå¯¹è±¡çææå¯æä¸¾ (enumerable) 屿§æ·è´å°æ°æé ç对象ä¸ã
æµ
æ·è´ (Shallow-cloningï¼ä¸å
å« prototype) å对象åå¹¶ï¼å¯ä»¥ä½¿ç¨æ´ç®ççå±å¼è¯æ³ãèä¸å¿
åä½¿ç¨ Object.assign()
æ¹å¼ã
var obj1 = { foo: "bar", x: 42 };
var obj2 = { foo: "baz", y: 13 };
var clonedObj = { ...obj1 };
// å
éåç对象ï¼{ foo: "bar", x: 42 }
var mergedObj = { ...obj1, ...obj2 };
// åå¹¶åç对象ï¼{ foo: "baz", x: 42, y: 13 }
æç¤º: Object.assign()
彿°ä¼è§¦å settersï¼èå±å¼è¯æ³åä¸ä¼ã
æç¤º: ä¸è½æ¿æ¢æè
模æ Object.assign()
彿°ï¼
var obj1 = { foo: 'bar', x: 42 }; var obj2 = { foo: 'baz', y: 13 }; const merge = ( ...objects ) => ( { ...objects } ); var mergedObj = merge ( obj1, obj2); // Object { 0: { foo: 'bar', x: 42 }, 1: { foo: 'baz', y: 13 } } var mergedObj = merge ( {}, obj1, obj2); // Object { 0: {}, 1: { foo: 'bar', x: 42 }, 2: { foo: 'baz', y: 13 } }
å¨è¿æ®µä»£ç ä¸ï¼å±å¼æä½ç¬¦ (spread operator) 并没ææé¢æçæ¹å¼æ§è¡ï¼èæ¯å å°å¤ä¸ªè§£æå为å©ä½åæ° (rest parameter), ç¶ååå°å©ä½åæ°å±å¼ä¸ºåé¢é对象ã
åªè½ç¨äºå¯è¿ä»£å¯¹è±¡å¨æ°ç»æå½æ°åæ°ä¸ä½¿ç¨å±å¼è¯æ³æ¶ï¼è¯¥è¯æ³åªè½ç¨äº å¯è¿ä»£å¯¹è±¡ï¼
var obj = { key1: "value1" };
var array = [...obj]; // TypeError: obj is not iterable
å±å¼å¤ä¸ªå¼
å¨å½æ°è°ç¨æ¶ä½¿ç¨å±å¼è¯æ³ï¼è¯·æ³¨æä¸è½è¶
è¿ JavaScript 弿éå¶çæå¤§åæ°ä¸ªæ°ãæ´å¤è¯¦ç»ä¿¡æ¯ï¼è¯·åèï¼apply()
ã
å©ä½è¯æ³ (Rest syntax) çèµ·æ¥åå±å¼è¯æ³å®å ¨ç¸åï¼ä¸åç¹å¨äºï¼å©ä½åæ°ç¨äºè§£ææ°ç»å对象ãä»æç§æä¹ä¸è¯´ï¼å©ä½è¯æ³ä¸å±å¼è¯æ³æ¯ç¸åçï¼å±å¼è¯æ³å°æ°ç»å±å¼ä¸ºå ¶ä¸çå个å ç´ ï¼èå©ä½è¯æ³åæ¯å°å¤ä¸ªå ç´ æ¶éèµ·æ¥å¹¶âåèâ为å个å ç´ ã请åèï¼å©ä½åæ°ã
è§è æµè§å¨å ¼å®¹æ§ åè§RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4