手册地址:http://www.w3school.com.cn/jsref/jsref_obj_string.asp
var str =
new String("abc"); //表示创建一个对象, object类型
var str2 = "abc"; //创建一个字符串, string类型
典型问题:
var s1 = "abc"; //栈内存
var s2 = "abc"; //栈内存
var s3 = new String("abc");
var s4 = new String("abc");
s1===s2 //true 不作类型转换
s1===s3 //false
s3===s4 //false
s1==s2 //true
s1==s3 //true
s3==s4 //false; 堆内存当中,两个对象
字符串的常见截取方法
//获取第几个字符
charAt(index)
//获取某个字符的ascii码
charCodeAt(index)
//将ascii码转为字符
String.fromCharCode(97)
//截取部分
substring(start,end)
//分割字符串
split("-")
什么是ascii码?
每个计算机符号所对应的二进制的数字
总共有256个,(全球统一)
在ASCII基础之上扩展出来的更多的符号编码,诞生了字符集,例如:中文编码
ISO-8859-1
GBK
GB2312
为了解决各个国家由于扩展编码不统一的问题(无法交流),发明了unicode
也就是我们现在所使用的utf-8
-8 -16有什么区别??
utf-8相对于utf-16更节省空间
字符集是什么?
在ascii码基础之上扩展出来的符号标准, 不同国家的标准不一样,因此产生了各种各样的字符集
字符串替换(敏感词过滤) replace
replace(要替换的内容, 替换后的内容); //在不使用正则表达式时,无法进行全局替换,
也就是说,只能替换查找到的第一个目标
//使用正则做全局替换
var reg = new RegExp("图片","g"); //第二个参数g ,表示全局Global搜索的意思
str.replace(reg, "<img src='xxxx.jpg'/>");
注: replace()不会对原字符串做任何修改,而是生成新的字符串并返回
高级用法:
"2017&08@08".replace(/(\d+)(\D)/g, function(matched, sub1,sub2, index, str){
console.log(matched, sub1, sub2);
return sub1+"-";
})
$是正则中的简略写法,代表()获取的块,$1~$9
match
console.log() 增加样式
console.log("%c 你好红色微软雅黑","color:red; font-size:20px; font-family:微软雅黑");
ASCII值的应用-------表单验证:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
</style>
<script>
window.οnlοad=function(){
var _body=document.getElementById("_body");
_body.children[2].οnclick=function(){
var content=_body.children[1].value;
if(!isNaN(content.charAt(0)-0))
alert("不能以数字开头 !");
else if(content.length<6||content.length>20)
alert("注册名的长度为6~20 !!");
else{
for(var i in content){
var char_= content.charCodeAt(i);
var isNumber = char_ >= 48 && char_ <= 57;
var isLetter = ( char_ >=65 && char_ <=90 ) || ( char_ >=97 && char_ <=122 );
var isUnderline= char_ == 95;
if( !isNumber && !isLetter && !isUnderline){
alert("注册名只能包含数字、字母和下划线");
return;
}
}
}
}
}
</script>
</head>
<body id="_body">
<label for="input_">请输入注册名:</label><input id="input_" type="text" />
<input type="button" value="注册" />
</body>
</html>
求一个字符串的字节数
//计算一个字符串的字节数
function countBytes(str, charset){
if(str && charset) {
var count = 0;
if(charset.toLowerCase() === "gbk"){
for(var i=0; i<str.length; i++){
var asc = str.charCodeAt(i);
if(asc < 256){
count+=1;
} else {
count+=2;
}
}
} else if(charset.toLowerCase() === "utf-16") {
for(var i=0; i<str.length; i++){
var asc = str.charCodeAt(i);
if(asc < 0xFFFF){ //65537
count+=2;
} else {
count+=4;
}
}
} else if(charset.toLowerCase() === "utf-8") {
for(var i=0; i<str.length; i++){
var asc = str.charCodeAt(i);
if(asc <= 0x7F){ //127
count += 1;
} else if(asc <= 0x7FF){ //2047
count += 2;
} else if(asc <= 0xFFFF) { //65537
count += 3;
} else {
count += 4;
}
}
}
return count;
}
}
//另外还有一种方法,可以计算JS在运行时,字符串的字节数,运行时是UTF-8标准,存储时字符集可以随意设定。
function countBytesRuning(str){
return new Blob([str]).size;
}
match + 正则表达式 应用:JQuery选择器模拟
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<div id="one"></div>
<div class="two"></div>
<div class="two"></div>
<div class="two" index=8></div>
</body>
<script type="text/javascript">
function $(selector) {
if(selector == undefined) return;
var matched = null;
//#id :id选择器,以#号开头
//规则:以#号开头,后跟1到任意个字符
if(matched = selector.match(/^\#(.+)/)) {
return document.getElementById(matched[1]);
}
//.class : class选择器,以.开头
//规则:以.号开头,后跟1到任意个字符
if(matched = selector.match(/^\.(.+)/)) {
return Array.from(document.getElementsByClassName(matched[1]));
}
//div :标签选择器,不以# .开头
//规则:不以. #号开头,由1到任意个字符(字母或数字0-9a-zA-Z)组成
if(matched = selector.match(/^[^\.\#]([0-9a-zA-Z]+)$/)) {
return Array.from(document.getElementsByTagName(matched[0]));
}
//div[index=8] :属性选择器
//规则:以1到任意字符(字母或数字0-9a-zA-Z)开头,[,属性名由以1到任意字符(字母或数字0-9a-zA-Z_-)组成,
//=,属性值以1到任意字符(字母或数字0-9a-zA-Z)组成,以]结尾
if(matched = selector.match(/^([^\.\#][0-9a-zA-Z]+)\[([0-9a-zA-Z\_\-]+)\=([0-9a-zA-Z]+)\]$/)) {
var ele = matched[1];
var attrKey = matched[2];
var attrValue = matched[3];
var eles = Array.from(document.getElementsByTagName(ele));
var res = eles.filter(function(item, index, arr) {
return item.getAttribute(attrKey) == attrValue;
});
return res;
}
}
console.log($("#one"));
console.log($(".two"));
console.log($("div"));
console.log($("div[index=8]"));
</script>
</html>
//随机验证码生成
function createCode(len) {
var str = "";
for(var i = 0; i < len; i++) {
var ascii = randomInt(48, 90);
while(ascii >= 58 && ascii <= 64) { //随机结果不符合要求
ascii = randomInt(48, 90);
}
//console.log(ascii);
str += String.fromCharCode(ascii);
}
return str;
}