JavaScript String 对象

来源:互联网 发布:黑客和程序员哪个厉害 编辑:程序博客网 时间:2024/06/08 04:41

手册地址:http://www.w3school.com.cn/jsref/jsref_obj_string.asp

使用常量定义字符串和使用new关键字定义字符的区别?

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.onload=function(){var _body=document.getElementById("_body");_body.children[2].onclick=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){ //65537count+=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){ //127count += 1;} else if(asc <= 0x7FF){ //2047count += 2;} else if(asc <= 0xFFFF) { //65537count += 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;}



原创粉丝点击