常用js及常用正则

数组操作

数组转换成字符串,默认连接字符是逗号(  ,)
arr.join("-")

把里面的内容添加到数组末尾,并返回修改后的长度。
arr.push("a","b");
移除数组最后一项,返回移除的那个值,减少数组的length。
arr.pop():

删除原数组第一项,并返回删除元素的值;如果数组为空则返回undefined 
arr.shift();
添加到原数组开头,并返回数组的长度 。
arr.unshift("A","B");

将数组里的项从小到大排序,比较的是字符串不是数字
arr.sort( )

反转数组项的顺序。
arr.reverse( )

添加到原数组,返回新数组。
newArr = arr.concat(9,[11,13]);

指定开始下标到结束下标组成的新数组,不包括结束位置。只有一个参数,返回从该参数指定位置开始到当前数组末尾。如果有两个参数。
arr.slice(1 , 5)


splice():删除、插入和替换。
删除:2个参数,要删除的第一项的位置和要删除的项数。
arr.splice( 1 , 3  )
插入:3 个参数:起始位置、 0(要删除的项数)和要插入的项。
arr.splice(  2,0,4,6  )
替换: 3 个参数:起始位置、要删除的项数和要插入的任意数量的项。插入的项数不必与删除的项数相等。
arr.splice(  2,2,4,6  )(删除两个,再插入2个,也可以插入3个)

indexOf() 和 lastIndexOf() 从前查和从后差
arr.indexOf(5)

arr.forEach(function(item, index){});

var newArr = arr.map(function(item){
    return item;
});

var newArr = arr.filter(function(item, index) {
    return item
});

字符串替换

str.replace("需要替换的字符串","新字符串") 
str.replace(/需要替换的字符串/g,"新字符串")

字符串、数组/Json 互转

//数组转字符串
var a =[a,b,c,d]
b = a.join(",");

//字符串转数组
var b = "a,b,c,d";
a = b.split(",");

//可以将json字符串转换成json对象
JSON.parse(jsonStr);  

//可以将json对象转换成json对符串
JSON.stringify(jsonObj);

substr和substring

substr(start,length) 第一个字符的索引是0,start必选 length可选
substring(start, end) 第一个字符的索引是0,start必选 end可选(不包含end)

//当只有一个参数时,两者相同,返回从start指定的位置直到字符串结束的子串
var str = "hello";
str.substr(3);  //lo
str.substring(3); //lo

//注意
substr 当length为0或者负数,返回空字符串
substring 以 start 和 end 两者中的较小值作为子字符串的起始点,start 或 end 为 NaN 或者负数,那么将其替换为0

Math常用

Math.random();  //0.0 ~ 1.0 之间的一个伪随机数。【包含0不包含1】 
Math.ceil();  //向上取整。
Math.floor();  //向下取整。
Math.round();  //四舍五入。

获取文本行数

$('.desc').each(function(){

    var styles = window.getComputedStyle(this, null);
    var lh = parseInt(styles.lineHeight, 10); //行高
    var h = parseInt(styles.height, 10); //控件高度
    var lc = Math.round(h / lh); //文字行数

    // console.log(lh+"--"+h)
    // console.log(lc)
    if(lc==4){
        $(this).next().show()

    }else{
        $(this).next().hide()

    }
})

滚动触底

$(window).scroll(function() {
  if(($(window).scrollTop() + $(window).height() > $(document).height()-10) && !ajax){
      if(maxPage>1 && page<maxPage && !ajax){
          ajax=!0;//注明开始ajax加载中
          page++;
          if(page>=2){
              $('.back-to-top').show();
          }
          util.getData(page)
      }
  }
});

滚动回到顶部

$('html,body').animate({scrollTop: '0px'}, 800);

滚动到指定位置

var windowHeight = $(window).height();
var h = $('.toopen').offset().top
$(window).scrollTop(h-windowHeight+80)

滚动悬浮 position: sticky; top: 0;

.top-tab{
    width: 100%;
    height: .86rem;
    background: #fff;
}
.top-tab.fixed{
    position: fixed;
    top: 0;
}

<div class="top-tab toptab-scroll"></div>
<div class="top-tab fixed"></div>

$(window).scroll(function() {
  var topTabY = $('.toptab-scroll').offset().top;              
  if($(window).scrollTop()>=topTabY){
      $('.fixed').show()
  }else{
      $('.fixed').hide()
  }
});

判断字符串结尾

//str是否以target结尾
function confirmEnding(str, target) {
  var start = str.length - target.length;
  var arr = str.substr(start, target.length);
  if (arr == target) {
    return true;
  }
  return false;
}

正则电话号码

function checkMobile(mobile) {
  var re = /^1\d{10}$/
  if (re.test(mobile)) {
    // console.log("正确");
    return true
  } else {
    // console.log("错误");
    return false
  }
}

正则标签中图片地址

var str = "this is test string <img src=\"http:baidu.com/test.jpg\" width='50' > 1 and the end <img src=\"所有地址也能匹配.jpg\" /> 33! <img src=\"/uploads/attached/image/20120426/20120426225658_92565.png\" alt=\"\" />"
var imgReg = /<img.*?(?:>|\/>)/gi;
var srcReg = /src=[\'\"]?([^\'\"]*)[\'\"]?/i;
var arr = str.match(imgReg);  // arr 为包含所有img标签的数组

经纬度计算距离

// 方法定义 lat,lng
function getDistance( lat1,  lng1,  lat2,  lng2){
  var radLat1 = lat1*Math.PI / 180.0;
  var radLat2 = lat2*Math.PI / 180.0;
  var a = radLat1 - radLat2;
  var  b = lng1*Math.PI / 180.0 - lng2*Math.PI / 180.0;
  var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a/2),2) +
  Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2)));
  s = s *6378.137 ;// EARTH_RADIUS;
  s = Math.round(s * 10000) / 10;
  return s;
}
// 调用 return的距离单位为m
//getDistance(10.0,113.0,12.0,114.0)

对象key ,首字母小写

function toLowerCaseObjectKey(jsonObj) {
    if(typeof(jsonObj)=='object'){
        for (var key in jsonObj){
            let value = jsonObj[key]
            if(value instanceof Array){
                for(var item of value){
                    if(typeof(item)=='object'){
                        toLowerCaseObjectKey(item)
                    }
                }
            }

            //需要特殊处理的字符串
            let condition = ['URL','UUID']
            if(condition.includes(key)){
                jsonObj[key.toLowerCase()] = jsonObj[key];  
            }else{
                jsonObj[key.substring(0,1).toLowerCase()+key.substring(1)] = jsonObj[key];  
            }
            delete(jsonObj[key]);  
        }  
        return jsonObj;  
    }
}

获取地址栏url上的某个query参数


function getUrlQuery(name) {
  var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
  var r = location.search.substr(1).match(reg);
  if (r != null) {
    return unescape(r[2]);
  }
  return null;
}

sessionStorage

function saveStorage(value){
      sessionStorage.setItem("hasGo",value);
}
function loadStorage(){
  return sessionStorage.getItem("hasGo");
}
document.cookie = "auth_id=" + auth_id + ";domain=.domain.com;path=/";
js
JSRUN前端笔记, 是针对前端工程师开放的一个笔记分享平台,是前端工程师记录重点、分享经验的一个笔记本。JSRUN前端采用的 MarkDown 语法 (极客专用语法), 这里属于IT工程师。