一、属性

  1、length:字符串长度

  字符串中的每个元素都有对应的下标,总长度为length

  如:var str = 'hello';

  // str[0] = h;   str[3] = l;  str.length = 5;

  2、注: 字符串不可以被修改,如果必须要改,只能给当前变量,重新赋值

  var str = '亲,包邮哦';

  str[0] = '哎';

  console.log(str)  //亲,包邮哦   (值不变)

  //可以重新赋值,改变字符串变量

  var str = '亲,包邮哦';

  str = '哎,包邮哦';

  console.log( str ) //哎,包邮哦(重新赋值,值改变)

 

二、字符串的方法

  1、str.charAt( ): 获取指定下标的字符

  var str = 'hello';

  console.log(str.charAt(1)); //e

  或: console.log(str[1]);

  2、str.charCodeAt() :(成员方法)获取指定下标字符的ASCII码

  var str = 'hello';

  console.log(str.charCodeAt(1));

  3、String.fromCharCode():(静态方法)将指定ASCII码转换成字符

  console.log(String.fromCharCode(98,99,100));

 

  例:得到一个随机的大写字母:A-Z (65-90)

  Math.random(): 0-1,且不包括1

  parseInt( Math.random()*11): 0-10

  所以: var n = 65 + parseInt(Math.random()*26)  // 65-90 

  console.log(String.fromCharCode(n));

 

  4、str.indexOf():查找第一次出现指定字符(或子字符串)的下标,如果不存在则返回-1;(空格也算字符,也要计入下标内)

  var str = 'halo world';

  console.log( str.indexOf('ha') ) // 1

  console.log( str.indexOf('haa') ) // -1

  

  5、str.lastIndexOf():查找最后一次出现指定字符的下标,如果不存在则返回-1;

  

  6、str.search( ):查找第一次出现指定字符的下标,如果不存在则返回-1 ;

  跟indexOf用法类似,区别在,search可以用正则去查找匹配

  console.log( str.search( /E/i ) ); 查找字符串中第一次出现e或E的下标(i表示忽略大小写);

  

  7、str.concat( ):连接字符串,但通常用 + 号拼接;

 

  8、str.replace( ):替换,默认只会替换第一个匹配的字符或字符串;

  (需要写两个参数,第一个参数是字符串中的内容,第二个参数是要替换成的内容,第一个参数一般写正则表达式);

  var str = 'I am a boy boy boy';

  var str2 = str.replace( 'boy', 'girl' );

  console.log(str2) // I am a girl boy boy

  第一个参数一般写正则表达式

  var str = 'I am a boy BOY Boy';

  console.log( str.replace(/boy/gi, 'girl' ) )

  g:全局匹配;i:忽略大小写;

 

  9、str.substring(start, end):截取字符串(两个参数均表示下标 ,前闭后开)

  不给参数,返回的还是原字符串;一个参数,表示从当前下标到结束;两个参数,表示按指定下标截取;

 

  10、str.slice(start, end):截取字符串,参数表示的是下标

 

  11、str.substr() :截取字符串,第一个参数表示开始的下标,第二个参数表示截取长度;

    //substring, slice,substr的区别
    //substring
    //1,两个参数可以写反,大数可以写前面
    //2,参数如果为负数,则会变成0

    //slice
    //1, 大数不可以写前面,如果大数写前面则返回""
    //2,参数可以为负数,表示倒数第几个

    //substr
    //1, 第二个参数表示长度
    //2,参数可以为负数,表示倒数第几个

 

  12、str.split():拆分字符串,把字符串拆分成数组

 

  13、str.toLowerCase( ):把字符串转换成小写

 

  14、str.toUpperCase( ):把字符串转换成大写

 

  15、str.trim() : 去掉首尾空格

    var str = "  dd dd    ";
    console.log(str.trim()); //"dd dd"

 

  16、instanceof : 判断某个对象是否属于某个类

  var arr = [1,2,3,5];

  console.log( arr instanceof Array )   // true;

 

三、Math对象:可以用于执行数学任务

  Math.random()     //返回0-1之间的随机数

  Math.round(3.6)    //四舍五入

  Math.max(num1, num2) //返回较大的数

  Math.min(num1, num2) //返回较小的数

  Math.abs(num)    //绝对值

  Math.ceil( 19.3 )   //向上取整

  Math.floor( 11.8 ) //向下取整

  Math.pow(x, y)     //x的y次方

  Math.sqrt(num)   //开平方

 

四、字符串操作案例:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script>
			
			//1, https://www.baidu.com/s?name=avery&age=20&sex=male,取出name, age和sex的值.
			// https:// : 协议
			// www.baidu.com : 域名 (内部是ip地址)
			// /s : 路径
			// ? :分隔服务器地址和参数
			//name=avery&age=20&sex=male : 参数部分, 每两个参数之间用&符号分隔
			
			var str = "https://www.baidu.com/s?name=avery&age=20&sex=male";
			var name = "age";
			var val = fn(str, name);  
			console.log(val);
		
			function fn(str, name){
				var str2 = str.substring( str.indexOf("?")+1 ); //"name=avery&age=20&sex=male"
				var arr2 = str2.split("&"); 
				for (var i=0; i<arr2.length; i++) {
					var str3 = arr2[i]; //"name=avery" / "age=20"  / "sex=male"
					var arr3 = str3.split("=");
					if (arr3[0] == name) {
						return arr3[1];
					}
				}
				return "";
			}
			
			
			
			
			
			//2, 字母数字组合验证码(四位) (如: 4YT8) (数字,大写字母随机)
			var str = "";
			for (var i=0; i<4; i++) {
				var flag = Math.random()>0.5 ? true : false;
				if (flag) {
					str += parseInt(Math.random()*10);
				}
				else  {
					str += String.fromCharCode( 65 + parseInt(Math.random()*26) );
				} 
			}
			console.log(str);
			
			
			//3,  将字符串按照单词进行逆序,空格作为划分单词的唯一条件
			//   如传入:”Welome to Beijing”改为 “Beijing to Welcome”
			var str = "Welome to Beijing";
			var arr = str.split(" ");
			arr.reverse();
			var str2 = arr.join(" ");
			console.log(str2);
			
			
			//4,  实现函数,查找子串出现的次数,返回字符串str中出现子串的次数
			//   如传入:”abcabcabc”, “abc”;   返回:3
			//        “ababacccababa”  , “aba”  , 返回:4
			var str = "ababacccababa";
			var str2 = "aba";
			var n = 0; //次数
			
			while( str.indexOf(str2) != -1 ) {
				n++;
				str = str.substring( str.indexOf(str2) + str2.length );
			}
			console.log(n);
			
			
			//5,  已知邮箱的用户名只能由数字字母下划线组成,域名为@163.com
			//,写一个函数,判断一个字符串是否是千锋邮箱,是返回true,不是返回false。
			//  mail@163.com  是
			//  $mail@163.com  不是
			//  mail@163.comp  不是
			function fn(email){
				
				var arr = email.split("@");
				if (arr.length != 2) {
					return false;
				}
				
				//域名
				if (arr[1] != "@163.com") {
					return false;
				}
				
				//用户名
				var str = arr[0];
				for (var i=0; i<str.length; i++) {
					var ch = str[i];
					if (ch>='0'&&ch<='9' || ch>='a'&&ch<='z' || ch>='A'&&ch<='Z' || ch=='_') {
						continue;
					}
					return false;
				}
				
				return true;
				
			}
			console.log( fn("mail@163.com") );
			
			
			//6, 将字符中单词用空格隔开
			//    已知传入的字符串中只有字母,每个单词的首字母大写,请将每个单词用空格隔开,只保留第一个单词的首字母大写
			//    传入:”HelloMyWorld”
			//    返回:”Hello my world”
			var str = "HelloMyWorld";
			for (var i=1; i<str.length; i++) {
				var ch = str[i];
				if (ch>='A' && ch<='Z') {
					str = str.replace(ch, " " + ch.toLowerCase());
					i++;
				}
			}
			console.log(str);
			
			
			//7, 已知一个字符串对象中,英语单词用各种非字母字符分割,统计单词的个数
			//    传入: “Yes,she****is%%my@love.”  ->Yes she is my love, 5个
			var str = "Yes,she****is%%my@love.";
			for (var i=0; i<str.length; i++) {
				var ch = str[i];
				if (ch>='a'&&ch<='z' || ch>='A'&&ch<='Z') {
				}
				else {
					str = str.replace(ch, " ");
				}
			}
			console.log(str);
			
			var n = 0; 
			var arr = str.split(" ");
			for (var i=0; i<arr.length; i++) {
				if (arr[i].length != 0) {
					n++;
				}
			}
			console.log(n); //5
			
			
			
			
		</script>
	</head>
	<body>
		<p id="tip">提示</p>
		<input type="text" placeholder="请输入用户名" />
		<input type="password" placeholder="请输入密码" />
		<input type="button" value="登录" />
	</body>
</html>