记录看到或者用到的js代码,长期更新!
判断是否是正整数
number>>>0 === number-0
解析: number-0 转换成数字,再通过位移运算(>>>)判断是否跟原数字相等
补充,这个代码是有范围的,当数字> 999999999 的时候就不成立了
原理可以参考这篇文章, 传送门
安全检查javascript的类型
function typeOf(o){
let _toString = Object.prototype.toString;
//列举基本的数据类型和内置的对象类型
let _types = {
"undefined" : "undefined",
"number" : "number",
"string" : "string",
"boolean" : "boolean",
"[object Function]" : "function",
"[object Array]" : "array",
"[object Date]" : "date",
"[object RegExp]" : "regExp",
"[object Error]" : "error"
}
return _types[typeof o] || _types[_toString.call(o)] || (o? "object":"null");
}
ps: 上述方法适用于基本的数据类型和内置对象,而对于自定义对象是无效的。
判断是不是数组
function isArray(arr){
return Object.prototype.toString.call(arr) === '[object Array]'
}
判断是不是ios系统
function isIOS(){
let u = navigator.userAgent;
let isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
return isIOS;
}
转成字符串
function toString (val) {
return val == null
? ''
: typeof val === 'object'
? JSON.stringify(val, null, 2)
: String(val)
}
中划线转驼峰
function camelize(str){
return str.replace(/-(\w)/g, function (_, c) { return c ? c.toUpperCase() : ''; })
}
驼峰转中划线
function camelize(str){
return str.replace(/\B([A-Z])/g, '-$1').toLowerCase();
}
首字母大写
function capitalize(str){
return str.charAt(0).toUpperCase() + str.slice(1);
}
获取url的query,返回指定key的值
function getUrlQuery(url,key){
let querys = url.split('?');
if(querys.length<=1){
return false;
}
let reg = /&?([^=]+)=([^&#]+)/g;
let obj = {};
querys.forEach((query,i)=>{
query.replace(reg,function(re,$1,$2){
obj[$1]=$2;
});
})
if(obj[key]){
return obj[key];
}else if(!key){
return obj;
}else{
return false;
}
}
快速对数据进行降维打击(多维->一维)
var arr = [[1],[2]];
var arr2 = Array.prototype.concat.apply([],arr); //划重点 ,这个只能是二维->一维
var arr3 = arr.flat(Infinity); //多维->一维
h5页面跳转小程序
var ua = navigator.userAgent.toLowerCase();
if(ua.match(/MicroMessenger/i)=="micromessenger"){
wx.miniProgram.getEnv((res)=>{
if (res.miniprogram) {
// 如果在小程序环境中就跳转
wx.miniProgram.redirectTo({
url: '.......'
});
return;
}
})
}
判断是不是promise对象
function isPromise(val){
return (
val!==undefined&&
val!== null &&
typeof val.then === 'function' &&
typeof val.catch === 'function'
)
}
软绑定
不同于硬绑定,软绑定可以给默认绑定指定一个全局对象和undefined以外的值,那就可以实现和硬绑定相同的效果,同时保留隐式绑定或者显式绑定修改this的能力!
if(! Function.prototype.softBind){
Function.prototype.softBind = function(obj){
var fn = this;
var curried = [].slice.call(arguments,1);
var bound = function(){
return fn.apply(
(!this || this === (window || global)) ?
obj : this,
curried.concat.apply(curried,arguments)
);
};
bound.prototype = Object.create(fn.prototype);
return bound;
}
}
判断一个字符串一定可以转成数字
function isNumberic(n){
return !Number.isNaN(parseFloat(n)) && Number.isFinite(Number(n));
}
这代码比你想象中的要难理解许多