资讯专栏INFORMATION COLUMN

JS基础知识学习(三)

keke / 3201人阅读

摘要:基础知识字符串中常用的方法在中用单双引号包裹起来的都是字符串字符串就是由到多个字符组成的特点一以数字作为索引,从零开始特点二有属性,存储的是当前字符串中字符的个数字符长度如果指定的索引不存在获取的结果是真实项目中,我们经常操作字符串,此时

js基础知识 JavaScript 字符串中常用的方法
在JS中用单(双)引号包裹起来的都是字符串
var str="welcome to my home,my name is candy!"
//=>字符串就是由0到多个字符组成的
//特点一:以数字作为索引,从零开始
//特点二:有length属性,存储的是当前字符串中字符的个数(字符长度)
//str[100]->undefined 如果指定的索引不存在获取的结果是undefined
真实项目中,我们经常操作字符串,此时我们需要掌握常用的一些字符串操作方法

console.dir(String.prototype)

charAt &&charCodeAt

str.charAt(索引):返回指定索引位置的字符,和str[索引]的区别在于,当指定的索引不存在的时候,中括号的方式获取的是undefined,而charAt获取的是空字符串

str.charCodeAt(索引) :在charAt基础上,把获取的字符变为unicode编码值(对应ASCII码表)索引不存在的时候charCodeAt获取的是NaN

48-57:0-9

65-90:A-Z

97-122:a-z

String.formCharCode(十进制的unicode值):把值按照ASCII码表中的信息,转换为原有的字符,和charCodeAt正好对应

substr && substring && slice

实现字符串截取的三个办法

str.substr(n,m):从索引n开始,截取m个字符

str.sunstring(n,m):从索引n开始,截取到索引为m处(不包含m),把找到的部分截取

str.slice(n,m):和substring语法一样,区别在于slice支持以负数做索引

当索引是负数的时候,浏览器在处理的时候,使用字符串的总长度加上负数索引,然后按照正数处理操作。

细节知识点:

1、如果只传递n(str.substr(n)/str.substring(n)/str.slice(n)/),相当于从索引n开始一直截取到字符串的末尾

2、如果传递的索引值超出最大限制,也是把能截取的部分截取掉即可

3、如果一个参数都不传递:相当于把整个字符串都截取(字符串的克隆)

toUpperCase && toLowerCase

str.toUpperCase :把字母全部大写

str.toLowerCase :把字母全部小写

indexOf && lastIndexOf

str.indexOf:获取当前字符在字符串中第一次出现位置的索引

str.lastIndexof :获取当前字符在字符串中最后一次出现位置的索引

如果当前字符在字符串中没有出现过,结果是-1;我们根据这个规律可以验证一下当前字符串中是否包含某个字符
if(str.indexOf("?")===-1){
    //没有出现过
}
if(str.indexOf("?")>=0){
    //出现过
}

split

str.split:按照某一个字符把字符串拆分成数组中的某一项,和数组中的join方法是对应的

replace

str.replace :实现字符的替换

执行一次replace只能替换一次,如果有好几个都需要替换,在不使用正则的情况下我们需要执行很多次replace;

有些需求即使执行很多次replace也实现不了,此时需要使用正则处理,真实项目中replace一般都是和正则搭配使用的

trim && trimLeft && trimRight

str.trimLeft :去除字符串开始的空格

str.trimRight :去除字符串结尾的空格

str.trim :去除字符串首尾的空格

案例一:queryURLParameter
获取地址栏中URL地址问号传递的参数值

"https://www.baidu.com/s?wd=javascript&rsv_spt=1&issp=1"

"https://www.baidu.com/s?wd=node&rsv_spt=1&issp=1"

目标:把问号传递的参数值分别的解析出来

obj={wd:"javascript",rsv_spt:1,issp:1}

var str="https://www.baidu.com/s?wd=javascript&rsv_spt=1&issp=1";
//=>obj={wd:"javascript",rsv_spt:1,issp:1}

//=>方案一:
var questionIndex=str.indexOf("?");
str=str.substring(questionIndex+1);
console.log(str);//=>"wd=javascript&rsv_spt=1&issp=1"
var ary=str.split("&");
console.log(ary)//=>["wd=javascript","rsv_spt=1","issp=1"]
var obj={}
for(var i=0;i
function queryURLParameter(url){
    //=>url:传递的参数(我们当前要解析的url地址)
    var quesIndex=url.indexOf("?"),
        obj={}
    if(quesIndex===-1){//->url中没有问号传参
        return obj;
    }
    url=url.substr(quesIndex+1);
    var ary=url.split("&");
    for(var i=0;i
String.prototype.myQueryURLParameter=function
 myQueryURLParameter(){
        var obj={},
              reg=/([^=?&]+)=([^=?&]+)/g;
        this.replace(reg,function(){
            var arg=arguments;
            obj[arg[1]]=arg[2];
        })
        return obj;
    }
var str="https://www.baidu.com/s?wd=javascript&rsv_spt=1&issp=1";
console.log(str.myQueryURLParameter());
案例二(模拟验证码功能实现)
真实项目中的验证码:

真实项目中的验证码一般都是后台处理的,后台返回给客户端展示的是一个图片(图片中包含了验证码)

此案例使用前端js代码模拟验证码实现:




    
    Document
    


    
//1-code.js 此处完成页面刷新 验证码更换

var codeBox=document.getElementById("codeBox");
//=>生成四位随机验证码:取值范围
var areaStr="0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM";
//=>areaStr.length:62(0-61)
var result="";
for(var i=0;i<4;i++){
    // =>随机获取0~61之间的整数,作为接下来获取字符的索引
    var ran=Math.round(Math.random()*61);
    //=>根据索引获取一个随机字符
    var char=areaStr.charAt(ran);
    //=>把每次循环获取的字符放在最后的结果(result)中
    result+=char;
}
codeBox.innerHTML=result;
/***
2-code.js 
此处代码迭代1-code.js 将上述代码封装成函数queryCode;
并给验证码显示区添加点击刷新的效果
***/
var codeBox=document.getElementById("codeBox");
//=>queryCode:获取四位验证码
function queryCode(){
    var result="",
        areaStr="0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM";
    for(var i=0;i<4;i++){
        var ran=Math.round(Math.random()*61);
        result+=areaStr[ran];
    }
    codeBox.innerHTML=result;
}
//=>加载页面时需要执行一次这个方法:生成四位验证码
queryCode();
//=>点击盒子重新生成验证码(此处不加小括号:这块只是在把函数绑定给元素的点击事件,方法还没有执行,点击的时候才执行)
codeBox.onclick=queryCode;
/***
3-code.js
此处代码迭代2-code.js
完善随机四位验证码重复情况(去重)
****/
var codeBox=document.getElementById("codeBox");
//=>queryCode:获取四位验证码
function queryCode(){
    var result="",
        areaStr="0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM";
    for(var i=0;i<4;i++){
        var ran=Math.round(Math.random()*61),
            char=areaStr[ran];
            //=验证一下新获取的char字符是否已经在result中存在了,如果存在了我们不存储,重新获取一遍,反之才累加到result中
            if(result.indexOf(char)>-1){
                i--;
                continue;
            }
        result+=char;
    }
    codeBox.innerHTML=result;
}

queryCode();
codeBox.onclick=queryCode;
/***
4-code.js
此处代码迭代3-code.js
完善大小写字母重复情况
***/
var codeBox=document.getElementById("codeBox");
//=>queryCode:获取四位验证码
function queryCode(){
    var result="",
        areaStr="0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM";
    for(var i=0;i<4;i++){
        var ran=Math.round(Math.random()*61),
            char=areaStr[ran];
            //=>a和A也算重复,该如何处理?
            //result="Ab" "ab"
            //char="a"    "a"
            //result.toLowerCase().indexof(char.toLowerCase())===-1
            if(result.toLowerCase().indexOf(char.toLowerCase())>-1){
                i--;
                continue;
            }
        result+=char;
    }
    codeBox.innerHTML=result;
}
queryCode();
codeBox.onclick=queryCode;
/*
5-code.js
此方法为扩展方法,去重办法是将每此随机获取的字符去掉
并根据随机字符对应的unicode码判断是否为字母:
如果为大写字母则将小写字母一并去掉
如果为小写字母则将大写字母一并去掉
*/
var codeBox=document.getElementById("codeBox");
function queryCode(){
    var areaStr="0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM",
        result="";
    for(var i=0;i<4;i++){
        var ran=Math.round(Math.random()*(areaStr.length-1));
        var char=areaStr.charAt(ran);
        var charCode=areaStr.charCodeAt(ran);
        if(charCode>=65&&charCode<=90){
            areaStr=areaStr.replace(char.toLowerCase(),"");
        }else if(charCode>=97 &&charCode<=122){
            areaStr=areaStr.replace(char.toUpperCase(),"");
        }
        areaStr=areaStr.replace(char,"");
        result+=char;
    }
    codeBox.innerHTML=result;
}
queryCode();
codeBox.onclick=queryCode;

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

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

相关文章

  • ES6零基础教学_解析彩票项目-学习笔记(一)

    摘要:彩票项目实战学习记录一完整走了一遍课程,觉得还不错。支持正版人人有责零基础教学解析彩票项目下面是项目课程的目录路线一个项目分为三部分业务逻辑,自动构建系统,模拟数据和真实数据接口处理。 彩票项目实战学习记录(一) 完整走了一遍课程,觉得还不错。 总结: es6的知识点说得还算清楚,主要是为了了解和使用,不是深究,所以浅尝即止即可,所以觉得还不错。 完整还原了项目开发的代码设计和开发过...

    blastz 评论0 收藏0
  • Javascript学习总结 - JS基础系列

    摘要:案例每隔毫秒调用函数并显示时间。当点击按钮时,停止时间代码如下计时器每隔毫秒调用函数,并将返回值赋值给计时器计时器,在载入后延迟指定时间后去执行一次表达式仅执行一次。该值标识要取消的延迟执行代码块。 简述 本系列将持续更新Javascript基础部分的知识,谁都想掌握高端大气的技术,但是我觉得没有一个扎实的基础,我认为一切高阶技术对我来讲都是过眼云烟,要成为一名及格的前端工程师,必须把...

    zlyBear 评论0 收藏0
  • 写一本关于 React.js 的小书

    摘要:因为工作中一直在使用,也一直以来想总结一下自己关于的一些知识经验。于是把一些想法慢慢整理书写下来,做成一本开源免费专业简单的入门级别的小书,提供给社区。本书的后续可能会做成视频版本,敬请期待。本作品采用署名禁止演绎国际许可协议进行许可 React.js 小书 本文作者:胡子大哈本文原文:React.js 小书 转载请注明出处,保留原文链接以及作者信息 在线阅读:http://huzi...

    Scorpion 评论0 收藏0
  • 前端资源系列(4)-前端学习资源分享&前端面试资源汇总

    摘要:特意对前端学习资源做一个汇总,方便自己学习查阅参考,和好友们共同进步。 特意对前端学习资源做一个汇总,方便自己学习查阅参考,和好友们共同进步。 本以为自己收藏的站点多,可以很快搞定,没想到一入汇总深似海。还有很多不足&遗漏的地方,欢迎补充。有错误的地方,还请斧正... 托管: welcome to git,欢迎交流,感谢star 有好友反应和斧正,会及时更新,平时业务工作时也会不定期更...

    princekin 评论0 收藏0
  • JS框架 - 收藏集 - 掘金

    摘要:现在回过头总结,才又进一步的揭开了闭包的一层后台管理系统解决方案前端掘金基于系列的后台管理系统解决方案。什么是继承大多数人使用继承不外乎是为了获得基于的单页应用项目模板前端掘金小贴士本项目已升级至。 关于js、jq零碎知识点 - 掘金写在前面: 本文都是我目前学到的一些比较零碎的知识点,也是相对偏一点的知识,这是第二篇。前后可能没有太大的相关性,需要的朋友可以过来参考下,喜欢的可以点个...

    wenyiweb 评论0 收藏0

发表评论

0条评论

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