es8問(wèn)世想必各位小伙伴都特別興奮床牧,但在低版本的瀏覽器中無(wú)法使用又讓人很懊惱,既然這些功能這么棒遭贸,那就果斷在自己的項(xiàng)目中實(shí)現(xiàn)一套吧戈咳。
字符串填充
首先是padStart(padEnd)方法,以下是我寫(xiě)出的第一個(gè)版本壕吹,它存在了一個(gè)問(wèn)題除秀,沒(méi)有做參數(shù)類(lèi)型處理。
String.prototype._padEnd = function(n, str) {
var temp = '',
pad = '',
padArr = [];
//第二個(gè)參數(shù)可選算利,沒(méi)有的話默認(rèn)傳入' '
if(arguments.length === 1) {
str = ' ';
} else {
if(typeof str === 'string') {
str = str;
} else if(typeof str === 'number') {
str = '' + str;
} else {
str = '';
};
}
if(str.length > n) {
pad = str.substring(0,n);
} else {
for(var i = 0; i < n/str.length; i++) {
padArr.push(str);
}
pad = padArr.join('') + str.substring(0,n%str.length)
}
return this + pad;
}
接下來(lái)是第二個(gè)版本册踩,修補(bǔ)了上個(gè)版本發(fā)現(xiàn)的問(wèn)題
String.prototype._padEnd = function(n, str) {
var temp = '',
pad = '',
padArr = [];
if(isNaN(arguments[0])) {
return this.toString();
}
if(!arguments.length) {
return this.toString();
}
arguments.length === 1 ? str = ' ' : str = str.toString();
if(str.length > n) {
pad = str.substring(0,n);
} else {
var count = Math.floor(n/str.length);
while(count--) {
padArr.push(str);
}
pad = padArr.join('') + str.substring(0,n%str.length)
}
return this + pad;
}
對(duì)象值遍歷
Object.values()這個(gè)方法返回一個(gè)對(duì)象可枚舉的屬性值
Object.prototype._values = function(obj) {
var _arr = [];
for(var key in obj) {
_arr.push(obj[key]);
}
return _arr;
}
這個(gè)方法存在一個(gè)問(wèn)題,每次調(diào)用都會(huì)多輸出一個(gè)function對(duì)象效拭,不難發(fā)現(xiàn)暂吉,這個(gè)function對(duì)象正好是_values這個(gè)方法,由于for in會(huì)遍歷出所有可枚舉的屬性缎患,在創(chuàng)建_values方法的時(shí)候它的特性enumerable(可枚舉)默認(rèn)為true慕的,這時(shí)候可以使用hasOwnProperty這個(gè)方法來(lái)判斷當(dāng)前遍歷的屬性是否是自有屬性。
Object.prototype._values = function(obj) {
var _arr = [];
for(var key in obj) {
if(obj.hasOwnProperty(key)) {
_arr.push(obj[key]);
}
}
return _arr;
}
Object.entries()這個(gè)方法返回某個(gè)對(duì)象的可枚舉屬性與對(duì)應(yīng)值的二維數(shù)組
這個(gè)方法與Object.values()方法類(lèi)似挤渔,小伙伴們可以當(dāng)做練習(xí)肮街。
Object.prototype._entries = function(obj) {
var _arr = [];
for(var key in obj) {
if(obj.hasOwnProperty(key)) {
_arr.push([key,obj[key]]);
}
}
return _arr;
}