chapter 5、JS----从入门到熟练的小白之路(持续更新....)

208 阅读4分钟

一、字符串

【定义】用单引号或者双引用包起来

【小tips】:字符串也像数组一样,有数字索引,可以通过响应的索引获取对应的字符

  • 获取字符串的长度:str.length;
  • 获取第一个字符:str[0]
  • 获取最后一个字符:str[str.length-1];

二、字符串常用的方法

因为字符串是值数据类型,是按值操作,所以都不修改原来的数据

1)、charAt:

  • 作用:获取相应位置对应的字符
  • 参数:索引
  • 返回值:返回对应的字符
var str="zhufeng";
var res=str.charAt(0); ==>"z"

【tips】:如果写的索引值超出了字符串的长度,str[索引]和charAt的区别

var str="zhufeng";
srt[100]===>undefined
var res=str.charAt(100);===> ""

2)、charCodeAt:

  • 作用获取对应的ascII码值
  • 参数:索引
  • 返回值:对应的ascll码十进制对应值
 var str="xiaohui";
 var res=str.charCodeAt(0);
 ascii 编码地址: https://baike.sogou.com/v53369.htm?fromTitle=ASCII

3) indexOf

作用:获取特定字符在字符串中的首次出现的索引

参数:特定字符

返回值:如果包含就是具体首次出现的索引位置,如果不包含返回值就是-1;

4)lastIndexOf

和上面的一样,只是这个是特定字符在字符串中最后出现的位置索引

var str="chengxiaohui";
var res1=str.indexOf("c");===>0
var res2=str.indexOf("i");===>-1
var res=str.lastIndexOf("");===>9

利用上面两个方法,可以用来判断某个字符串中是否包含特定字符

var str="zfpx";
if(str.indexOf("z")>-1){
    // 如果包含要做的事情
}

5)slice

作用:查找字符串中特定位置的字符

参数:(n,m)n:起始索引(包含); m结束索引(不包含)

返回值:查找的字符

  • 从索引n(包括)开始查找到索引m(不包含)结束的字符
  • 如果所以m不写,就是查找到最后
  • 如果n只写一个0,或者不写就是复制一份
  • 也可以为负数,转换成正数的规律:str.length+负的索引值
var str="chengxiaohuiaichangfu"
str.slice(1,3)       ===>"he"
str.slice(0)      ===>复制一份
str.slice()       ===>复制一份 
var res=str.slice(-3,-1);   ===>“gf” 

6)substring(n,m)

subString 和slice 基本都一样,唯一不同在于,subString 不支持负数索引,而slice支持负数索引

7)substr(n,m)

  • 作用:从索引n开始截取m个字符
  • 参数:n,m
  • 返回值:截取的字符串
  • 也支持从负索引开始
var str="chenghui";
var res=str.substr(-3,2);  ====>"hu"

8) toUpperCase()

toUpperCase(): 把字符串转换为大写

9) toLowerCase()

toLowerCase();把字符串转换为小写

10) replace()

  • 作用:把字符串中某部分的字符替换成另一部分字符
  • 参数:(str1,str2)第一个参数代表的是要替换的字符或者是正则;第二个参数代表的是替换后的字符
  • 返回值:替换后的字符串
var str="xiaohui2018xiaohui2019xiaohui";
var res=str.replace("xiaohui","changfu");   
//===>"changfu2018xiaohui2019xiaohui"
var res=str.replace(/xiaohui/g,"changfu");
console.log(res)===>"changfu2018changfu2019changfu"

11) split()

  • 作用:按照指定的字符把字符串分割成数组
  • 参数:分割符
  • 返回值:分割后的数组 split 和 join 对比记忆
 var str="1-2-3";
 var res=str.split("-");
 
 console.log(res); ===>  ["1", "2", "3"]

三、练习题

1、【时间字符串处理】把下面的字符串变成 "2019年08月18日 12时32分18秒"

var str="2019-8-18 12:32:18";
//var res=str.split(/-| |:/g)
var time=str.split(" ");
console.log(time) //["2019-8-18", "12:32:18"]
var timeLeft=time[0];
var timeRight=time[1];
var ary1=timeLeft.split("-"); // ["2019", "8", "18"]
var ary2=timeRight.split(":");// ["12", "32", "18"]
var result=ary1[0]+"年"+ary1[1]+"月"+ary1[2]+"日"+" "+ary2[0]+"时"+ary2[1]+"分"+ary2[2]+"秒" 
console.log(result) //"2019年8月18日 12时32分18秒"
/* 
  补零
*/
function zero(num){
    return num<10?"0"+num:num;
}
var ss=zero(11);
var result=zero(ary1[0])+"年"+zero(ary1[1])+"月"+zero(ary1[2])+"日"+" "+zero(ary2[0])+"时"+zero(ary2[1])+"分"+zero(ary2[2])+"秒" 
//"2019年08月18日 12时32分18秒"

2、queryURLParams 问号参数处理

/* 
        var  str ="https://www.baidu.com?name=zhufeng&age=10&id=14";
        {
            name:"zhufeng",
            age:10,
            id:14
        }
       */
      function urlParams(str){
          var obj={};
          var paramsStr=str.split("?")[1];
          if(paramsStr){
              //[name=zhufeng,age=10,id=14]
              var paramsAry=paramsStr.split("&");
              for(var i=0;i<paramsAry.length;i++){
                    //name=zhufeng
                   var item=paramsAry[i];
                   //[name,zhufeng]
                   var itemAry=item.split("=");
                   obj[itemAry[0]]=itemAry[1];
              }
          }
          return obj;
      }
      var  str ="https://www.baidu.com?name=zhufeng&age=10&id=14";
      var result= urlParams(str);

四、Math常用的方法

Math 称之为数学函数,它也是对象类型数据,主要是用来操作数字的

1)Math.abs() 求绝对值

Math.abs(-1)

2)Math.ceil/Math.floor 向上取整,向下取整

向上取整,无论是正数还是负数,都取最大的值

向下取整,无论是正数还是负数,都取最小的值

Math.ceil(1.2)//2

Math.ceil(-1.6)//-1

Math.floor(1.8)//1

Math.floor(-1.1)//-2

3)Math.round() 四舍五入

  • 正数的话,还是正常的,之前理解的,但是如果是负数,临界点必须大于5
Math.round(1.5)//2

Math.round(-1.5)//-1

Math.round(-1.51)//-2

4)Math.sqrt() 开平方

Math.sqrt(9)

5)Math.pow(n,m) 取幂

n的m次幂

Math.pow(3,2)   ==> 9

6)Math.PI

Math.PI  ===>3.141592653589793

7)Math.max/Math.min 获取最大值和最小值

Math.max(1,2,3)
Math.min(4,5,6)

8)Math.random() 获取0~1 之间的随机数(大于等于0,小于1)

获取n 到m 之间的随机数:Math.random()*(m-n)+n;

// 获取1020 之间的随机数
Math.random()*10+10
 a.Math.random是取[0,1)的数;
 b.取[min,max]的随机整数时使用如下公式:
  Math.floor(Math.random().(max-min+1)+min)
 c.取[min.max)的随机整数时使用如下公式:
  Math.floor(Math.random().(max-min)+min)
 d.取(min,max]的随机整数时使用如下公式:
  Math.floor(Math.random().(max-min)+min+1)

[升级版2]

如果传的实参中包含字符串,就变成数字,如果是非有效数字,就直接略过

function fn(){
   var total=null;
   for(var i=0;i<arguments.length;i++){
       var item=Number(arguments[i]);
       isNaN(item)?null:total+=item
   }
   return total;
}

[高级版3:es6]

function fn(...arg){
  return eval(arg.filter((item)=>!isNaN(item)).join("+")) 
}
var res=fn(1,2,3,"3","3px");