Remember to keep it Simple, Stupid.Do one thing and do it best.
toNum(),目的是转化值为数字
源码片段1
function toNum(val) {
var num = parseFloat(val);
return isNaN(val)? val : num;
}
parseFloat( ) parseInt( ) Number( ) 为什么选择parseFloat( )
parseFloat('111.111'); // 111.111
parseInt('111.111') ; // 111 只截取整数部分
Number('111.111') ; // 111.111
Number('1a'); // NaN
parseFloat('1a') // 1 只截取有效数字
parseInt(‘ab’) // NaN
parseInt(‘ab’, 16) // 171
//parseInt(num, radix) 可以指定基数,最好在使用的时候明显指定
parseInt(‘11’, 10) // 11 指出是在十进制下的转换
源码片段2
var class2type = {};
var toStirng = class2Type.toString;
'Boolean Number Symbol String Object Function Array Date RegExp Error'
.split(' ').forEach(function ( name ){
class2type[ '[object' + name +']' ] = name.toLowercase()
})
function type(val) {
if(val == null) {
// undefined null 属于特殊类型
return val + '';
}
if( val !== val ) {
// NaN 也特殊对待
return val + ''
}
return typeof val === 'object'?
class2type[ toString.call(val) ] : typeof val;
}
var removeAitem = [];
var indexOf = removeAitem.indexOf;
function remove$1(arr, item) {
if(type(arr) === 'array') { //稍作修改
var pos = arr.indexOf(item);
if(pos > -1) {
return arr.splice(pos, 1);
}
}
小结:
arr.forEach(function (item, index));
arr.indeOf(item); arr中有item 返回 -1 有item 返回在数组中的位置 postion
源码片段3 检测是否是私有属性
var hasOwnProp = Object.prototype.hasOwnProperty;
function hasOwn(obj, prop) {
return hasOwnProp.call(obj, prop);
}
小结: 缓存原型链上的hasOwnProperty, 方便以后的调用, 查找速率快