一、属性
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>