用js实现原型方法系列之字符串系列
1. big
String.prototype._big = function(){
let tempStr = this
return '<big>' + tempStr + '</big>'
}
var str = 'big'
document.write('<br>'+ str._big()) // 大号字体 big
2. endsWith
检查字符串末尾的值是否与传入的值一样,是否返回true/false
/*
* @param {string} str 值1,传入检测是否在字符串末尾的值
* @param {number} length 值2,可以设置从哪里为末尾开始检测
* @return {boolean}
*/
String.prototype._endsWith= function(str,length){
if(length === undefined || length>this.length){
length = this.length
}
let len = length - str.length
let val = ''
for(let i=len;i<length;i++){
val += this[i]
}
return val === str
}
let str = 'abcaa'
console.log("str._endsWith('aaa'):::", str._endsWith('aa',5)) // true
3. charAt
/*
* @param {string | number} index 要查找的索引
* @return 索引对应的值,找不到返回空串
*/
String.prototype._charAt = function(index){
for(let i=0;i<this.length;i++){
if(index == i){
return this[i]
}
}
return ''
}
let str = 'abcaa'
console.log("str._charAt('aaa'):::", str._charAt('1')) // b
4. split
/**
* @param {string} str 要分割的位置
* @return {array} tempArr 分割后的数组
* */
String.prototype._split = function(str){
let tempArr = []
for(let i=0;i<this.length;i++){
if(this[i] !== str){
tempArr[tempArr.length] = this[i]
}
}
return tempArr
}
let str = 'a-b-c-a-a'
console.log("str._charAt('aaa'):::", str._split("-"))
5. indexOf
/**
* @param {string} str 要查找的参数
* @param {number} index 从哪里开始查找
* @return {number} str所在的索引,-1为未找到
* */
String.prototype._indexOf = function(str,index){
let len = str.length
let start = 0
let returnIndex = 0
for(let i=index || 0;i<this.length;i++){
if(this[i] === str[start]){
start++
returnIndex = i
}else{
if(start === len){
return returnIndex - len + 1
}else{
start = 0
}
}
}
return -1
}
let str = 'abc aaa dds bbb aaa'
console.log(str._indexOf('aaa')) // 4
6. repeat
/**
* @param {string} num 复制几次
* @return {string} 复制后的字符串
* */
String.prototype._repeat = function(num){
let str = ''
if(typeof num !== 'number' || num == Infinity){
throw new TypeError('类型不对 or 太大了')
}else{
num = Math.floor(num)
for(let i=0;i<num;i++){
str += this
}
}
return str
}
let str = 'abc'
console.log(str._repeat(2)) // abcabc
match
// 这个是不可能实现的,我还要实现一个正则我的天,只是会用就算了。
// 这个是js字符串的一个查找匹配字符串的方法,将匹配正则的结果push进一个数组里并返回它。
matchAll
// 实在不知道有什么用处了
var regexp = /t(e)(st(\d?))/g;
var str = 'test1test2';
console.log([...str.matchAll(regexp)])
// (2) […]
// 0: Array(4) [ "test1", "e", "st1", … ]
// 1: Array(4) [ "test2", "e", "st2", … ]
length: 2
7. padStart
填充字符串,输入填充至几位,将循环传入的字符串,最终+=原字符串并返回它。
/**
* @param {number} length 填充几位
* @param {string} str 填充的字符串
* @return {string} 填充后的字符串
* */
String.prototype._padStart = function(length,str){
str = String((typeof str ==='undefined'?' ':str))
if(this.length > length || str == '') return String(this);
let tempStr = ''
let index = 0
length = length - this.length
for(let i=0;i<length;i++){
if(index>=str.length){
index = 0
}
tempStr+=str[index]
index++
}
return tempStr + this
}
let str = 'abc'
console.log(str._padStart(10,undefined).length) // 10
7. padEnd
跟上面的一样,只不过是填充的位置反了
/**
* @param {number} length 填充几位
* @param {string} str 填充的字符串
* @return {string} 填充后的字符串
* */
String.prototype._padEnd = function(length,str){
str = String((typeof str ==='undefined'?' ':str))
if(this.length > length || str == '') return String(this);
let tempStr = ''
let index = 0
length = length - this.length
for(let i=0;i<length;i++){
if(index>=str.length){
index = 0
}
tempStr+=str[index]
index++
}
return this + tempStr
}
let str = 'abc'
console.log(str._padEnd(10,'dd')) // abcddddddd