初始**:
const
istype
=function
(type)
]` === object.prototype.tostring.
call
(t)}
}const isarray =
istype
('array'
)console.
log(
isarray([
]))
簡化後:
const
istype
= type => t =>
`[object $]`
=== object.prototype.tostring.
call
(t)const isarray =
istype
('array'
)// 此時 isarray 為
// isarray = t => `[object array]` === object.prototype.tostring.call(t)
原理:
object 的原型上有 tostring 方法,可以返回物件的資料型別;
例:傳入[1, 2, 3]
呼叫後得 [object array] 字串;傳入呼叫後得 [object object] 字串。
注意:擴充套件:
call()
方法引數是(this
指向, 原方法所需引數1, 原方法所需引數2 ),會直接呼叫函式;
bind()
方法引數是(this
指向, 原方法所需引數1, 原方法所需引數2 ),會返回乙個新函式。
item:當前陣列項,
index:當前陣列索引,
arr:當前陣列
注意:當使用es6 箭頭函式時,第二個引數會因為箭頭函式的詞法繫結而失效
例:
const arr =[1
,2,3
,4]window.number =
1let obj =
// 第二個引數不傳
let arr1 = arr.
map(
function
(item, index, arr)
)console.
log(arr1)
// [1, 2, 3, 4]
// 第二個引數傳入obj
let arr2 = arr.
map(
function
(item, index, arr)
, obj)
console.
log(arr2)
// [2, 4, 6, 8]
// 使用箭頭函式
let arr3 = arr.
map(
(item, index, arr)
=>
, obj)
console.
log(arr3)
// [1, 2, 3, 4]
array.prototype.
mymap
=function
(fn, pointer)
return newarr
}
item:當前陣列項,
index:當前陣列索引,
arr:當前陣列
注意:當使用es6 箭頭函式時,第二個引數會因為箭頭函式的詞法繫結而失效
filter()
方法不會檢測空陣列
filter()
方法不會改變原陣列
利用原生js實現filter()
array.prototype.
myfilter
=function
(fn, pointer)
return newarr
}
item:當前陣列項,
index:當前陣列索引,
arr:當前陣列
注意:當使用es6 箭頭函式時,第二個引數會因為箭頭函式的詞法繫結而失效
當陣列為空時,返回false
利用原生js實現some()
array.prototype.
mysome
=function
(fn, pointer)
}return istrue
}
(本文會持續更新)
js陣列原生方法的實現
1 陣列遍歷foreach 自定義foreach param fn 待執行方法 function foreach fn 2 陣列對映map 自定義map param fn 待執行方法 function map fn return list 3陣列過濾filter 自定義filter param fn...
JS陣列方法的原生實現
該方法接受任意個引數,然後新增到陣列的末尾 function push arr,arg push 接受任意個引數,按照順序新增到陣列末尾,返回新的陣列長度 return arr.length 該方法刪除並返回陣列的最後乙個元素,如果陣列為空,返回undefined function pop arr ...
原生JS 原型鏈
所有物件都有自己的原型物件,由於原型物件也是物件,所以它也有自己的原型。因此,就會形成乙個 原型鏈 所有物件都繼承了object.prototype的屬性。這就是所有物件都有valueof和tostring方法的原因,因為這是從object.prototype繼承的。object.prototype...