JavaScript不清不楚之copyWithin

2021-08-21 04:23:58 字數 2522 閱讀 3154

**均來自:mdn

原陣列將被改變,但是陣列的長度不會發生變化,ie系列不支援此方法

if (!array.prototype.copywithin) 

var o = object(this);

// steps 3-5.

// >>> 0 的作用(無符號右移):

// 1.能轉換為數值的先轉換為數值然後在右移

// 2.非數值型別不能轉換為數值的返回0

// 3.自然數向左取整,負數會轉換為正數

var len = o.length >>> 0;

// steps 6-8.

// >> 0 的作用(有符號右移):

// 1.能轉換為數值的先轉換為數值然後在右移

// 2.非數值型別不能轉換為數值的返回0

// 3.自然數向左取整,負數向右取整

var relativetarget = target >> 0;

//扶正target索引,負數絕對值超過len取0,正數超過len取len

var to = relativetarget < 0 ?

math.max(len + relativetarget, 0) :

math.min(relativetarget, len);

// steps 9-11.

var relativestart = start >> 0;

var from = relativestart < 0 ?

math.max(len + relativestart, 0) :

math.min(relativestart, len);

// steps 12-14.如果沒傳end取len,傳了end就按照上面的規則扶正end

var end = arguments[2];

var relativeend = end === undefined ? len : end >> 0;

var final = relativeend < 0 ?

math.max(len + relativeend, 0) :

math.min(relativeend, len);

// step 15.

var count = math.min(final - from, len - to);

// steps 16-17.

var direction = 1;

//from to final count最大為len最小為0

//from複製的開始索引, to賦值的開始索引, final複製的結束索引,count

/** * a. from === to

* 1. from === final count = 0; return o;

* 2. from < final count = final - from; 正常迴圈,return o;

* 3. from > final count < 0; return o;

* b. from > to

* 1. from === final count = 0; return o;

* 2. from < final count = final - from; 正常迴圈,return o;

* 3. from > final count < 0; return o;

* c. from < to

* 1. from === final count = 0; return o;

* 2. from < final

* i. 如果 final - from <= len - to, count = final - from,

* ii. 如果 final - from > len - to, count = len - to,

* 按i和ii這種分析方法,不適合恰當,可以畫圖來示意,就是to始終落在from和final的區間裡,

* 這種情況就需要特殊處理也就是下面的 from < to && to < (from + count)

* 3. from > final count < 0; return o;

*/if (from < to && to < (from + count))

// step 18.

while (count > 0) else

from += direction;

to += direction;

count--;

}// step 19.

return o;

};}

var obj = ;

array.prototype.copywithin.call(obj, 0, "a")

0, "c")

//

Javascript不清不楚之concat

均來自 mdn 此方法用來合併多個陣列,不會改變原有的陣列,返回乙個新的陣列 根據提供的陣列做淺拷貝生成新陣列 注意 陣列 值在連線時保持不變。此外,對於新陣列的任何操作 僅當元素不是物件引用時 都不會對原始陣列產生影響,反之亦然 var arr 1,2,3 var res arr.concat 4...

不清不楚的 Session 和 Cookie

會話 session 跟蹤是web程式中常用的技術,用來跟蹤使用者的整個會話。常用的會話跟蹤技術是cookie與session。cookie通過在客戶端記錄資訊確定使用者身份,session通過在伺服器端記錄資訊確定使用者身份。cookie機制 cookie技術是客戶端的解決方案,cookie就是由...

一些關於集合的不不清不楚的東西

1.集合分為 泛型集合 list 和 非泛型集合 arraylist 2.集合與陣列類似 但相比較於陣列 集合的好處在於 長度不固定 資料型別可以不用定義 牽扯到泛型集合最基本的判斷 事先定義資料型別的為泛型集合 否則為非泛型集合 並且集合區別於陣列的是可以動態擴容,並且它的索引會 根據程式的擴充套...