生活随笔
收集整理的這篇文章主要介紹了
ES5-16【utils】数组方法、类数组
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
數(shù)組方法
concat
toString
將數(shù)組轉(zhuǎn)成字符串,用逗號(hào)隔開(kāi)
slice(a,b) [a,b)
不傳值,拷貝了一份 不傳b,截取到最后一位 傳b,截取到b之前的那位 a/b是負(fù)數(shù)(和splice一樣,最后一位是-1 )
join
不傳參數(shù)相當(dāng)于toString!用逗號(hào)連接 傳空字符串,去除逗號(hào)
split(a,b) - (字符串方法)
不傳值,會(huì)將整個(gè)字符串放進(jìn)數(shù)組 第二個(gè)參數(shù)b,是用a分割后截取b位
類數(shù)組
函數(shù)的實(shí)參arguments dom數(shù)組 沒(méi)有數(shù)組方法,因?yàn)闆](méi)有繼承Array.prototype,繼承Object.prototype 類數(shù)組的原型
function
test ( ) { console
. log ( arguments
) console
. log ( arguments
. toString ( ) )
}
test ( 1 , 2 , 3 )
function
test ( ) { console
. log ( arguments
) arguments
. __proto__
= Array
. prototypeconsole
. log ( arguments
. toString ( ) )
}
test ( 1 , 2 , 3 )
對(duì)象轉(zhuǎn)類數(shù)組:給對(duì)象加splice屬性,對(duì)象的原型依然是Object.prototype
function
test ( ) { console
. log ( arguments
)
}
test ( 1 , 2 , 3 )
var obj
= { '0' : 1 , '1' : 2 , '2' : 3 , 'length' : 6
}
console
. log ( obj
)
function
test ( ) { console
. log ( arguments
)
}
test ( 1 , 2 , 3 )
var obj
= { '0' : 1 , '1' : 2 , '2' : 3 , 'length' : 3 , 'splice' : Array
. prototype
. splice
}
console
. log ( obj
)
var obj
= { '0' : 1 , '1' : 2 , '2' : 3 , 'length' : 3 , 'splice' : Array
. prototype
. splice
}
console
. log ( obj
. splice ( 3 , 0 , 4 ) )
console
. log ( obj
)
console
. log ( Object
. prototype
. toString
. call ( obj
) )
obj
[ 'push' ] = Array
. prototype
. push
console
. log ( obj
. push ( 5 ) )
console
. log ( obj
)
console
. log ( Object
. prototype
. toString
. call ( obj
) )
只添加push方法也能調(diào)用,但不會(huì)轉(zhuǎn)成[]的形式 還可以在Object.prototype上添加數(shù)組方法(這樣所有對(duì)象都會(huì)變成類數(shù)組) 這種形式有什么實(shí)際意義:恐怕就是,對(duì)于類數(shù)組形式的對(duì)象,對(duì)他們進(jìn)行push操作后,可以通過(guò)length屬性獲取長(zhǎng)度。注意,對(duì)象依然是沒(méi)有部署iterator接口的,不能使用for…of
var obj
= { '0' : 1 , '1' : 2 , '2' : 3 , 'length' : 3 , 'push' : Array
. prototype
. push
}
console
. log ( obj
. push ( 5 ) )
console
. log ( obj
)
push的原理 length屬性決定了類數(shù)組的長(zhǎng)度,push開(kāi)始的位置
將類數(shù)組轉(zhuǎn)換成數(shù)組
Array.prototype.slice.call(arguments)
練習(xí)
var arr
= [ 0 , 1 , 2 , 3 , 'A' , 'B' , 'c' , 2 , 3 , 'A' , 1 , 2 , 3 ]
Array
. prototype
. unique
= function
( ) { var obj
= { } var res
= [ ] for ( var i
= 0 ; i
< this
. length
; i
++ ) { var key
= this
[ i
] obj
[ key
] = key
} for ( var k in obj
) { res
. push ( obj
[ k
] ) } return res
}
console
. log ( arr
. unique ( ) )
優(yōu)化、減少循環(huán)次數(shù)
var arr
= [ 0 , 1 , 2 , 3 , 'A' , 'B' , 'c' , 2 , 3 , 'A' , 1 , 2 , 3 ]
Array
. prototype
. unique
= function
( ) { var obj
= { } var res
= [ ] for ( var i
= 0 ; i
< this
. length
; i
++ ) { var key
= this
[ i
] if ( ! obj
. hasOwnProperty ( key
) ) { obj
[ key
] = keyres
. push ( key
) } } return res
}
console
. log ( arr
. unique ( ) )
封裝typeof 能區(qū)分null、基本包裝類
function
myTypeOf ( val
) { var temp
= [ '[object Null]' , '[object Function]' , '[object Array]' , '[object Object]' ] var baseType
= typeof
( val
) var cmpType
= Object
. prototype
. toString
. call ( val
) if ( baseType
!= 'object' ) { return baseType
} else { return temp
. includes ( cmpType
) ?
getName ( cmpType
) : cmpType
}
}
function
getName ( str
) { return str
. split ( ' ' ) . slice ( - 1 ) [ 0 ] . slice ( 0 , - 1 ) . toLocaleLowerCase ( )
}
console
. log ( 'null' , myTypeOf ( null
) )
console
. log ( 'undefined' , myTypeOf ( undefined
) )
console
. log ( 'number' , myTypeOf ( 1 ) )
console
. log ( 'string' , myTypeOf ( 'null' ) )
console
. log ( 'boolean' , myTypeOf ( true ) )
console
. log ( 'fn' , myTypeOf ( function
( ) { } ) )
console
. log ( 'obj' , myTypeOf ( { a
: 1 } ) )
console
. log ( 'arr' , myTypeOf ( [ 1 ] ) )
console
. log ( 'new Boolean' , myTypeOf ( new Boolean ( 1 ) ) )
console
. log ( 'new Number' , myTypeOf ( new Number ( '1' ) ) )
console
. log ( 'new String' , myTypeOf ( new String ( 1 ) ) )
var str
= 'dsjfhdkjshfkdj0shfc0bkjkja'
function
getStr ( ) { let obj
= { } let res
= '' for ( var i
= 0 ; i
< str
. length
; i
++ ) { let val
= str
[ i
] if ( ! obj
. hasOwnProperty ( val
) ) { obj
[ val
] = 1 } else { obj
[ val
] + = 1 } } for ( var k in obj
) { if ( obj
[ k
] == = 1 ) { res
+ = k
} } return res
}
console
. log ( getStr ( str
) )
or
var str
= 'dsjfhdkjshfkdj0shfc0bkjkja'
function
getStr ( ) { var res
= '' for ( var i
= 0 ; i
< str
. length
; i
++ ) { var cur
= str
[ i
] if ( str
. indexOf ( cur
) == str
. lastIndexOf ( cur
) ) { res
+ = cur
} } return res
}
console
. log ( getStr ( str
) )
總結(jié)
以上是生活随笔 為你收集整理的ES5-16【utils】数组方法、类数组 的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔 網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔 推薦給好友。