var arr=[1,2,3,4,5]; arr.length=3; console.log(arr)//[1,2,3]
直接改變數組的length的值數組
var arr = [1,1,2,2,3,3] const removeDuplicateltems = arr => [...new Set(arr)]; console.log(removeDuplicateltems(arr))//[1,2,3] /** * ...拓展運算符,是遍歷Symbol.iterator * 和for...of同樣的遍歷方法 */
//把函數做爲值傳入進去 function callSomeFunction(someFunction,someArgument){ return someFunction(someArgument); }
最終調用的這個函數 他有兩個參數, 第一個參數是一個方法 , 第二個參數是第一個方法的參數。瀏覽器
function add10(num){ return num + 10; } var result1=callSomeFunction(add10,10); console.log(result1);//20
這個例子稍微一看就明白了吧, 傳入的10 最終成了add()的參數, 也就是成了num, 因此結果是20函數
function getGreeting(name){ return "holle," + name; } var result2=callSomeFunction(getGreeting, "Nicholas"); console.log(result2);//holle Nicholas
上面的理解了 這個也就不難了 同理 「 Nicholas」 變成了getGreeting() 的參數 name,因此輸出結果是 holle Nicholasthis
先看看關於call()的官方解釋,「調用一個對象的一個方法,以另外一個對象替換當前對象。」,看了這樣的解釋,或許讓你更摸不着頭腦了。看例子:指針
var x = "我是全局變量"; //定義全局變量x function a(){ //定義函數類結構a this.x = "我是在函數類結構a中聲明的哦"; } //定義普通函數,彈出當前指針所包含的變量x的值 function f(){ alert (this.x); } f.call(new a());//返回值爲「我是在函數類結構a中聲明的哦」
個人理解是,f.call(new a())就是把函數(其實也是對象)f複製到被調用對象「new a()」下面去解析,事實上和下面這段代碼的解析結果同樣:code
function a(){ this.x = "我是在函數類結構a中聲明的哦"; alert(this.x); //我是在函數類結構a中聲明的哦 } a();
只不過此時變量X的做用域不一樣而已,咿…看起來好像有點繼承的味道哦,難道不是嗎?在上例中,f徹底被構造函數a的實力對象繼承了,若是說這還不足以說明a.call(b)是一種繼承模式,那麼再看一個更具備繼承味道的用法吧。對象
function f(){ this.a ="a"; this.b = function(){ alert("b"); } } function e(){ f.call(this); } var c = new e(); alert(c.a); //彈出a c.b(); //彈出b
在這個例子中,只要會使用瀏覽器的朋友,都能看得出來e徹底繼承了f的屬性和方法,不然是沒法解釋的,由於在e中並無定義屬性a和b,那麼按常理推斷在e的實例對象c中,並不會出現這兩個屬性。繼承