js String操作

字符串用成对单引号或双引号表示;
字符串一旦创建就不可变,改变某个变量保存的字符串,首先要销毁原来的字符串,然后用另一个包含新值的字符串填充该变量。
通过 + 连接符拼接字符串:
var str1 = "hello";
str1 = str1 + " javaScript";
document.write(str1);

或者:

var str1 = "hello";
str1 += " javaScript";
document.write(str1);

输出:hello javaScript
要在字符串中添加换行符,需要使用转义字符"\n",但这种方法只能用在像警告、确认对话框之类的情况下。
如果将这段文本作为HTML内容呈现,就无效了,此时用"<br>"代替它

js concat()方法:
string.concat(string2, string3[, ..., stringN]);

var str2 = "hello".concat(" javaScript"," world");
document.write(str2);

这种拼接的方式不如直接用加号拼接方便;
js 字符串长度length属性:
返回字符个数,而不是字节长度;

var str = "kitty猫";
document.write(str.length);//6

js substr(start [,length]) 返回从start开始的length个字符组成的字符串;

不设置参数,则返回字符串本身;

设置start,则返回start到字符串结尾;start为负数一般浏览器视为从浏览器最后开始数,倒数第一个字符为-1;IE8-则转为0;

设置length时,start也必须设置,返回start开始length个字符;

length大于从start到字符串结尾的长度,则返回从start到字符串结尾;

length为负数,直接转成0,返回空字符串;

var str = "hello world";
document.write(str.substr());//不设置参数,返回字符串本身
document.write(str.substr(1));//"ello world"
document.write(str.substr(1,7));//"ello wo"(保留了最后的空格)
document.write(str.substr(1,11));//"ello world"
document.write(str.substr(-4));//"orld"(IE8-返回整个字符串)
document.write(str.substr(-4,2));//"or"
document.write(str.substr(1,-1));//""
document.write(str.substr(-4,-2));//""

js substring(start, end) 返回从字符串start索引到end索引之间的子串(不包含end索引的字符)

start和end索引如果是负数就会变成0;

当start和end最终都是正值时,比较两个值的大小,如果end小于start就相互交换值,再获取子串

var str = "hello world";
document.write(str.substring());//"hello world"
document.write(str.substring(1));//"ello world"
document.write(str.substring(1,7));//"ello w"
document.write(str.substring(7,1));//"ello w"
document.write(str.substring(-1));//"hello world"
document.write(str.substring(3,-3));//"hel"
document.write(str.substring(-1,-3));//""
document.write(str.substring(-3,-1));//""
document.write(str.substring(7,8));//"o"
document.write(str.substring(8,7));//"o"

js slice(start, end)  返回从字符串start索引到end索引之间的子串(不包含end索引处的字符)

start或者end如果是负数就从字符串最后一个字符串往左数,最右边的字符索引为-1;

如果end索引小于start索引返回空字符串

var str = "hello world";
document.write(str.slice());//"hello world"
document.write(str.slice(1));//"ello world"
document.write(str.slice(1,7));//"ello w"
document.write(str.slice(7,1));//""
document.write(str.slice(-1));//"d"
document.write(str.slice(3,-3));//"lo wo"
document.write(str.slice(-1,-3));//""
document.write(str.slice(-3,-1));//"rl"
document.write(str.slice(7,8));//"o"
document.write(str.slice(8,7));//"o"

js toLowerCase()和toUpperCase()
toLowerCase()将字符串转为全小写;
toUpperCase()将字符串转为全大写;
不影响字符串本身;

var str = "ShanGHai";
document.write(str.toLowerCase());//"shanghai"
document.write(str.toUpperCase());//"SHANGHAI"
document.write(str);//"ShanGHai"

js indexOf()
返回某个指定的字符串在字符串中首次出现的位置(从左向右)。包含子串返回下标,不包含返回-1;
js lastIndexOf()
返回从右向左出现某个字符或字符串的首个字符索引值;
js charAt(index) 返回某个索引处的字符;
js charCodeAt(index) 返回某个索引处字符的unicode值;
js String.fromCharCode(index1,index2...indexn)

var str = String.fromCharCode(72, 101, 108, 108, 111); 
document.write(str);//"Hello"

js stringObject.split(separator,howmany)

separator必需,字符串或正则表达式,从该参数指定的地方分割字符串,返回的子串数组不包含分割符;

howmany可选。该参数可指定返回的数组的最大长度(为负数和大于数组长度返回整个数组)。如果设置了该参数,返回的子串不会多于这个参数指定的数组。如果没有设置该参数,整个字符串都会被分割,不考虑它的长度。

document.write(str.split(" "));//How,are,you,doing,today?
document.write(str.split(" ",3));//How,are,you
document.write(str.split(" ",6));
document.write(str.split(" ",-2));
document.write(str.split(""));//H,o,w, ,a,r,e, ,y,o,u, ,d,o,i,n,g, ,t,o,d,a,y,?
var str2 = 'a|b|c|d';
document.write(str2.split("|",-1.5));//a,b,c,d
var str3 = "abc1de23fg4hi567jk8lm";
document.write(str3.split(/\d/g));//abc,de,,fg,hi,,,jk,lm

“.”,“|”和“\”都是转义字符,必须得加"\\";

奇怪这里测试|分割字符串竟然不用转义,今天还碰到一个问题,在js脚本中直接|没法分割字符串的。

字节统计未去研究:参考自:星期八的Blog
上面的length属性可以确定字符串的字符长度;
当js校验时,需要限定字符长度,必须根据字节来统计;
匹配中文字符的正则表达式: [\u4e00-\u9fa5]
匹配双字节字符(包括汉字在内):[^\x0000-\x00ff]
下面的字节长度统计来自于:星期八的Blog
str.charCodeAt(i)>255 的字符占两个字符;

var lenFor = function(str){
 var byteLen=0,len=str.length;
 if(str){
  for(var i=0; i<len; i++){
   if(str.charCodeAt(i)>255){
    byteLen += 2;
   }else{
    byteLen++;
   }
  }
  return byteLen;
 }else{
  return 0;
 }
}

正则表达式检测字符串的字节长度:

var lenReg = function(str){
  return str.replace(/[^x00-xFF]/g,'**').length;
}

用正则表达式检测所用的时间竟然是for循环的两倍!!!!

这个好使---
function getBytesLength(str) {
// 在GBK编码里,除了ASCII字符,其它都占两个字符宽
return str.replace(/[^\x00-\xff]/g, 'xx').length;



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值