常⽤,好⽤的js代码记录看到或者⽤到的js代码,长期更新!
判断是否是正整数
number>>>0 === number-0
解析: number-0 转换成数字,再通过位移运算(>>>)判断是否跟原数字相等
补充,这个代码是有范围的,当数字> 999999999 的时候就不成⽴了
原理可以参考这篇⽂章,
安全检查javascript的类型
function typeOf(o){
let _toString = String;
//列举基本的数据类型和内置的对象类型
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 String.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){
var reg = /([a-z]?)-([a-z])/g;
var index = 0;
place(reg,function(r,$1,$2){
if($1){
return $2?$1+$2.toUpperCase():'';
}else{
return $2;
}
字符串长度js
})
}
驼峰转中划线
function camelize(str){
place(/\B([A-Z])/g, '-$1').toLowerCase();
}
⾸字母⼤写
function capitalize(str){
return str.charAt(0).toUpperCase() + str.slice(1);
}
获取url的query,返回指定key的值
function getUrlParam(sUrl, sKey) {
var index = sUrl.indexOf('?');
var urlStr = sUrl.substr(index+1);
var reg = /&?([^=]+)=([^&#]+)/g;
var result = {};
if(result[$1]){
var item = result[$1];
result[$1] = [].concat(item,$2);
}else{
result[$1] = $2;
}
});
if(sKey){
return result[sKey]||'';
}else{
return false
}
}
快速对数据进⾏降维打击(多维->⼀维) var arr = [[1],[2]];
var arr2 = at.apply([],arr); //划重点 ,这个只能是⼆维->⼀维var arr3 = arr.flat(Infinity); //多维->⼀维
h5页⾯跳转⼩程序
var ua = LowerCase();
if(ua.match(/MicroMessenger/i)=="micromessenger"){
Env((res)=>{
if (res.miniprogram) {
// 如果在⼩程序环境中就跳转
directTo({
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,
);
};
bound.prototype = ate(fn.prototype);
return bound;
}
}
判断⼀个字符串⼀定可以转成数字
function isNumberic(n){
return !Number.isNaN(parseFloat(n)) && Number.isFinite(Number(n));
}
这代码⽐你想象中的要难理解许多
JSON序列化Error对象
如果对error对象直接⽤JSON.stringify(),直接打印"{}"; 那是因为error对象的属性是不可遍历的;可以⽤
var error = new Error('this is a error message');
JSON.stringify(OwnPropertyNames(error));
格式化⽇期
输⼊⼀个date对象,并根据格式输出
function formatDate(date,format){
var o = {
'y+': FullYear(),
'M+': Month()+1,
'd+': Date(),
'H+': Hours(),
'h+': Hours()> 12? Hours()-12: Hours(),
'm+': Minutes(),
's+': Seconds(),
'w': Day()
};
var weekends =  ['⽇', '⼀', '⼆', '三', '四', '五', '六'];
for(var k in o){
if(new RegExp('('+k+')').test(format)){
if(k=='y+'){
format = place(RegExp.$1, (o[k]+'').substr(4- RegExp.$1.length));
}else if(k=='w'){
format = place(RegExp.$1,weekends[o[k]]);
}else{
format = place(RegExp.$1, RegExp.$1.length==1? o[k]: ('00'+o[k]).substr((''+o[k]).length))
}
}
}
return format;
}
获取字符的真实长度
⼀般中⽂字符都是两个字节的
function getLength(s){
var len = s.length;
var reg = /[\u4e00-\u9fa5]/;
for(var i=0;i<len;i++){
st(s.charAt(i))){
len+=2;
}else{
len+=1;
}
}
return len;
}
rgb 颜⾊字符串转换为⼗六进制
⽐如把rgb(255,255,255)转成#ffffff。关键在于,可以⽤.toString(16)⽅法把数字转成⼗六进制function reg2hex(sRGB){
var reg = /rgb\((\d+),\s*(\d+),\s*(\d+)\)/;
var rs = sRGB.match(reg);
if(!rs){
return sRGB;
}else{
var str = '#';
for(var i=1;i<=3;i++){
var n = parseInt(rs[i]);
if(n<0 || n>255){return sRGB}
str += n>16? n.toString(16): '0'+n.toString(16);
}
return str;
}
}
⼗进制和⼆进制的转换
// ⼗进制转⼆进制
// ⼆进制转⼗进制
parseInt(num,2);
获取全局变量global(在不同的环境)
// self 是window的保留关键字,在浏览器中指向window对象
var global = typeof window != 'undefined' && window.Math == Math
window : typeof self != 'undefined' && self.Math == Math  self : Function('return this')();

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。