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)
最終呼叫的這個函式 他有兩個引數, 第乙個引數是乙個方法 , 第二個引數是第乙個方法的引數。
function add10(num)
var result1=callsomefunction(add10,10);
console.log(result1);//20
這個例子稍微一看就明白了吧, 傳入的10 最終成了add()的引數, 也就是成了num, 所以結果是20
function getgreeting(name)
var result2=callsomefunction(getgreeting, "nicholas");
console.log(result2);//holle nicholas
上面的理解了 這個也就不難了 同理 「 nicholas」 變成了getgreeting() 的引數 name,所以輸出結果是 holle nicholas
先看看關於call()的官方解釋,「呼叫乙個物件的乙個方法,以另乙個物件替換當前物件。」,看了這樣的解釋,或許讓你更摸不著頭腦了。看例子:
var x = "我是全域性變數"; //定義全域性變數x
function a()
//定義普通函式,彈出當前指標所包含的變數x的值
function f()
f.call(new a());//返回值為「我是在函式類結構a中宣告的哦」
我的理解是,f.call(new a())就是把函式(其實也是物件)f複製到被呼叫物件「new a()」下面去解析,事實上和下面這段**的解析結果一樣:
function a()
a();
只不過此時變數x的作用域不同而已,咿…看起來好像有點繼承的味道哦,難道不是嗎?在上例中,f完全被建構函式a的實力物件繼承了,如果說這還不足以說明a.call(b)是一種繼承模式,那麼再看乙個更具有繼承味道的用法吧。
function f()
}function e()
var c = new e();
alert(c.a); //彈出a
c.b(); //彈出b
在這個例子中,只要會使用瀏覽器的朋友,都能看得出來e完全繼承了f的屬性和方法,否則是無法解釋的,因為在e中並沒有定義屬性a和b,那麼按常理推斷在e的例項物件c中,並不會出現這兩個屬性。 個人JS零碎知識整理
1 dom2級事件 規範要求的事件流包括三個階段 事件捕獲階段 處於目標階段 事件冒泡階段 2 isnan 數字 空串 空格 返回false 變數是數字時返回false,空串或空格 isnan做0處理 所以也返回false 3 能觸發gpu渲染的動作有 opacity,transform,trans...
OS零碎知識整理 1
1.流式檔案,屬於邏輯結構的檔案。2.通道 i o處理機 能夠完成主存與外設之間的資訊傳輸。3.作業系統的主要設計目標是 1 方便使用者 2 提高系統效率。4.死鎖的四個必要條件 1 互斥條件 2 請求和保持條件 3 不可剝奪條件 4 循壞等待條件 缺一不可 5.為了使使用者能夠透明地訪問檔案,檔案...
OS零碎知識整理 8
這個演算法較為公平,也比較好理解。基本思路 依照各作業或程序到來的順序組成佇列進行排程。不利於短作業或短程序,因為如果短作業前有很多長作業,那麼短作業必須等長作業都執行完成後才能執行,周轉時間太長。此排程演算法很少單獨使用,一般與其他演算法搭配使用。基本思路 將cpu的處理時間分成固定大小的時間片,...