资讯专栏INFORMATION COLUMN

其实,只是再多想一点

aboutU / 2844人阅读

摘要:按照这个说法,在还是行不通的,应该得到,得到没问题,有些摸不到边了,所以自定义一下这个方法以便备用总结日益强大,各种语言逐步向它靠近。开发中一般时间很紧迫,好多东西都没工夫想,所以还有很多要优化的地方,有时候,放慢脚步,可能也是一种进步吧

Jquery再熟悉不过,其中的$.ajax封装也不陌生,其中
$.ajax({
    url:url,
    type:"GET",
    data:data,
    success:function(res){
        
    },
    error:function(err){
        
    }
});

以前比较喜欢success固定回调这种写法,很清晰
接下来实现success和error这种语法

var $={
    ajax(call){
        if(call.bol){
          call.success("成功的回调");  
        }else{
            console.error("bol is undefined");//提示
        }
    }
}

调用:

$.ajax({
    bol:false,//切换bol存在即可调用成功回调
    success:function(res){
        console.log(res);
    },
    error:function(err){
        console.log(err);
    }
});
类似物流信息,后台返回一个字符串,前端识别出连续的11位数字,并且可拨打电话

做这里的时候,想要跟后台多要一个字段为电话,前端再a标签直接包起来。但是后台接的也是三方,三方返回就是一个整串......
后来仔细想想这个流程,即使后台多给一个字段,这需求一样做不完美
比如这个串是这样的:

"您的快递正在配送,配送员电话:17600699305,某某快递持续为您服务"

后台分了俩字段
"str1=您的快递正在配送,配送员电话:,某某快递持续为您服务" str2="17600699305"
这个str2插到str1的哪里呢?显然也不好弄。
那还不如不麻烦后台,前端自己消化。
"识别连续的11位数字",第一想到的就是正则:

var str="您的快递正在配送,配送员电话:17600699305,某某快递持续为您服务",strCon=str.match(/d{11}/);

match符合条件会返回一个数组,包含 匹配到的内容,内容的开始下标,整个内容,还有个groups(求释义)
接下来封装实现:

function continuFunc(str){
    var strBol=str.match(/d{11}/);
    if(strBol){
       return strBol.input.slice(0,strBol.index)+""+strBol[0]+""+strBol.input.slice(strBol.index+strBol[0].length,str.length);
    }
}

就是分成三个部分返回,以匹配到的11位连续数字为节点,前后各为两部分,再进行拼接。
index就是匹配区的开始下标,所以第一部分从0取到下标,第二部分已经返回,第三部分取index+字符长度(11)——结尾

toFixed()方法如何实现(保留n位小数)

刚开始看到是不是很慌,这方法调用的时候都是Number.toFixed(),而常规的函数封装都是

function Func(argu){
    return argu;
}

调用都是Func("调用");,很慌。
这种函数基本都是绑定在原型上的,不难发现,调用toFixed方法的都是Number类型,所以toFixed方法应该就是绑定在Number的prototype了,接下来分析内部实现问题

Number.prototype.toDiyFixed=function(n){
    return (Math.round(this * Math.pow( 10, n ))/ Math.pow( 10, n)).toString();
}

调用var num=100.123, a.toDiyFixed(2)得到100.12。
toDiyFixed方法就成功的copy了toFixed方法。
a=100.123这个例子讲实现原理:把原数 num先乘以100(n是多少就乘以10的几次方),再进行四舍五入,(去除小数两位之后的小数,因为乘以100以后,前两位小数已经变为整数部分,四舍五入操作就不会影响了),至此完成保留2(n)位小数的操作。
注意:但是,这个方法有个问题,就是不会自动向末尾补0,比如说100.196保留两位小数应该得到100.20,但是该方法只能拿到100.2,100.201应该得到100.20,但该方法得到100.2,目前还没想到解决办法,欢迎一起交流探讨,但是基础功能可以实现.
另外说个原生toFixedbug:
0.7.toFixed(0)发现得到的是1(IE)
0.0350.045保留两位小数后得到的都是0.04(Chrom),当然如果觉得这点误差无所谓,10.3510.45保留两位小数得到10.310.4发现都是错的,这是不容小觑的数字了吧,后来查阅资料说,jstoFixed方法用的是”银行家算法“,实质就是 ”四舍六入无成双“,那啥意思呢,当舍去位的数值小于5时,直接舍去该位;当舍去位的数值大于等于6时,在舍去该位的同时向前位进一;当舍去位的数值等于5时,如果前位数值为奇,则在舍去该位的同时向前位进一,如果前位数值为偶,则直接舍去该位。
按照这个说法,在Chrom还是行不通的,10.35应该得到10.4,10.45得到10.4没问题,有些摸不到边了,所以自定义一下toDiyFixed这个方法以便备用

总结:

javaScript日益强大,各种语言逐步向它靠近。(✌️) 开发中一般时间很紧迫,好多东西都没工夫想,所以还有很多要优化的地方,有时候,放慢脚步,可能也是一种进步吧!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/96161.html

相关文章

  • 数据结构与算法的javaScript描述-前言[苦逼的失业中年]

    摘要:还以为我是一个失业青年,后来想想,后已经是中年了。对于各路框架,还是根据业务需求去学习比较好,相信自己的学习能力。我还是先巩固一下数据结构和算法吧。数据结构与算法的描述针对自己目前所处的环境,就用来描述常用的数据结构跟常用的算法。 失业中年 前段时间,带我出道的CTO要带我去创业,然后,之前谈好的技术方案在我过去之后都没能开始,怪可惜的,甚至,他自己都背锅离职了。再后来,股东突然撤资了...

    tanglijun 评论0 收藏0
  • vue中select绑定多个值及回显

    摘要:对于第一种方式,回显时只需要将从后台获取的数据拼接在一起就行,对于第二种方式,需要去进行循环对比,找出对应的索引值然后进行赋值,具体代码在这里。 距离上篇文章已经快九个月了,我是不是堕落了。。这篇文章主要是记录我在项目中遇到的一个小问题,其实说小也不小,在去年刚接触vue的时候,对于select如何绑定多个值这个问题一度让我不知所措。刚开始完全没接触过vue和elementUI直接上手...

    Shimmer 评论0 收藏0
  • 图文 视频双管齐下,带你全面彻底理解Retrofit源码,Android开发五年

    摘要:协程的判断条件下面我们来着重看下的源码,因为从这里开始就涉及到协程的判断。第二点是关键点,用来判断该方法的调用是否使用到了协程。原理我们先来看下使用协程是怎么写的这是一个标准的协程写法,然后我们再套用上面的条件,发现完全匹配不到。 第一眼看,跟我之前印象中的有点区别(也不知道是什么版本),return的时候居然...

    不知名网友 评论0 收藏0

发表评论

0条评论

aboutU

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<