JavaScript String 对象

手册地址: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.ο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;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值