记录看到或者用到的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){
var reg = /([a-z]?)-([a-z])/g;
var index = 0;
return str.replace(reg,function(r,$1,$2){ if($1){
return $2?$1+$2.toUpperCase():'';
}else{
return $2;
} })
}

驼峰转中划线


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 getUrlParam(sUrl, sKey) {
var index = sUrl.indexOf('?');
var urlStr = sUrl.substr(index+1);
var reg = /&?([^=]+)=([^&#]+)/g;
var result = {};
urlStr.replace(reg,function(re,$1,$2){
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 = 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));
}

这代码比你想象中的要难理解许多

JSON序列化Error对象

如果对error对象直接用JSON.stringify(),直接打印"{}"; 那是因为error对象的属性是不可遍历的;可以用Object.getOwnPropertyNames()获取自身的属性

var error = new Error('this is a error message');
JSON.stringify(error,Object.getOwnPropertyNames(error));

格式化日期

输入一个date对象,并根据格式输出


function formatDate(date,format){
var o = {
'y+': date.getFullYear(),
'M+': date.getMonth()+1,
'd+': date.getDate(),
'H+': date.getHours(),
'h+': date.getHours()> 12? date.getHours()-12: date.getHours(),
'm+': date.getMinutes(),
's+': date.getSeconds(),
'w': date.getDay()
}; var weekends = ['日', '一', '二', '三', '四', '五', '六']; for(var k in o){
if(new RegExp('('+k+')').test(format)){
if(k=='y+'){
format = format.replace(RegExp.$1, (o[k]+'').substr(4- RegExp.$1.length));
}else if(k=='w'){
format = format.replace(RegExp.$1,weekends[o[k]]);
}else{
format = format.replace(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++){
if(reg.test(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;
}
}

十进制和二进制的转换


// 十进制转二进制
num.toString(2); // 二进制转十进制
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')();

常用,好用的js代码的更多相关文章

  1. 站长常用的200个js代码 站长常用js代码大全 站长常用js代码集合

    站长常用的200个js代码 1.文本框焦点问题 onBlur:当失去输入焦点后产生该事件 onFocus:当输入获得焦点后,产生该文件 Onchange:当文字值改变时,产生该事件 Onselect: ...

  2. 常用近百个js代码汇总

    //檢查空串 function isEmpty(str){ )) return (true); else return(false); } //檢查是否未數字 function isDigit(the ...

  3. 常用js代码整理、收集

    个人整理了一下个人常用到的一些js代码,以方便学习以及日后使用,或许有一些是个人之前从网上摘下来的,但是不记得是具体从哪里来的了,如果你看到有一段代码跟你的文章很相似甚至一样,请不要气愤,请告诉我,我 ...

  4. 可重复使用Tab切换代码和纯js代码

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  5. js 常用正则表达式表单验证代码

    正则表达式使用详解 简介 简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具.其作用如下:测试字符串的某个模式.例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一 ...

  6. js常用正则表达式表单验证代码

    方法一:  var re=/正则表达式/;  re.test($("txtid").val())  方法二:  $("txtid").val.match(/正则 ...

  7. Google Chrome调试js代码,开发者工具之调试工具常用功能

    参考:Google Chrome调试js代码-http://www.open-open.com/lib/view/open1384785324165.html 重点:左下角一个{}括号图标按钮用于把杂 ...

  8. selenium常用操作,查找元素,操作Cookie,获取截图,获取窗口信息,切换,执行js代码

    目录: 1. 常用操作 2. 查找元素 3. 操作Cookie 4. 获取截图 5. 获取窗口信息 6. 切换 7. 执行JS代码 简介 selenium.webdriver.remote.webdr ...

  9. 127个常用的JS代码片段,每段代码花30秒就能看懂(上)

    127个常用的JS代码片段,每段代码花30秒就能看懂(上) JavaScript 是目前最流行的编程语言之一,正如大多数人所说:“如果你想学一门编程语言,请学JavaScript.” FreeCode ...

随机推荐

  1. iOS-贝塞尔连续曲线

    一个曲线 UIColor *color = [UIColor redColor]; [color set]; UIBezierPath *path = [UIBezierPath bezierPath ...

  2. 08-01 java 帮助文档的制作和使用,使用jdk提供的帮助文档

    01_帮助文档的制作和使用 制作说明书的流程 如何制作一个说明书呢? A:写一个工具类 B:对这个类加入文档注释 怎么加呢? 加些什么东西呢? C:用工具解析文档注释 javadoc工具 D:格式 j ...

  3. (转)Cognos的下载地址分享

    原文:https://blog.csdn.net/Wikey_Zhang/article/details/76138965 刚开始接触Cognos,发现Cognos真是一款挺不错的报表工具,先分享一下 ...

  4. PEP_2007相关问题记录

    1.在C++中,int main(int argc, char** argv)中的参数是什么意思? 其中,第一个argc是输入的参数的个数,第二个argv可以理解为一个数组,我们可以通过argv来打印 ...

  5. CentOS 7.5 安装与配置 Percona Server 5.7

    个人比较喜欢 MYSQL 的轻量,今天花了一点时间把阿里云上的 MYSQL5.7 换成了 Percona-Server .Percona 是一个开源的 MySQL 衍生版,TokuDB 的数据库引擎使 ...

  6. chrome中Timeline的使用(译)

    一.概括 Timeline面板包括以下四个部分: 控制面板.开始记录.停止记录.配置捕获信息: 概况.页面性能的整体概况: flame chart.直观展示cpu堆的情况.你能够看到三条虚线,蓝色的代 ...

  7. lucene 初探 - 查询

    lucene初探, 是为了后面solr做准备的. 如果跳过lucene, 直接去看solr, 估计有点懵. 由于时间的关系, lucene查询方法也有多个, 所以单独出来. 一. 精确查询 /** * ...

  8. MySQL Replication 详解MySQL数据库设置主从同步的方法

    MySQL同步的流程大致如下:  1.主服务器(master)将变更事件(更新.删除.表结构改变等等)写入二进制日志(master log). 2.从服务器(slave)的IO线程从主服务器(binl ...

  9. Semaphore 信号量

    一个计数信号量.从概念上讲,信号量维护了一个许可集.如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可.每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者. ...

  10. PTA (Advanced Level) 1009 Product of Polynomials

    1009 Product of Polynomials This time, you are supposed to find A×B where A and B are two polynomial ...