JavaScript类型系统之String

前面的话
 
  string是由单引号或双引号括起来的字符序列,且被限定在同种引号之间,即必须是成对单引号或双引号。字符串的独特在于它是唯一没有固定大小的原始类型

  字符串中每个字符都有特定的位置,首字符从位置0开始,第二个字符在位置1,依次类推,这意味着字符串中的最后一个字符的位置一定是字符串的长度减1

特点
 
   JavaScript中的字符串是不可变的。字符串连接需要先创建一个新字符串,然后在新字符串中填充两个需要拼接的字符串,最后再销毁原来的字符串。这个过程在后台发生,也是在某些旧版本浏览器(IE6)拼接字符串速度慢的原因,但后来已经解决了这个低效率问题。

var lang = "java";
lang = lang + "script";

转义字符
 
   转义字符也叫字符字面量

\0 空字节
\n 换行
\t 制表
\b 空格
\r 回车
\f 进纸
\\ 斜杠
\' 单引号
\" 双引号
\xnn 以十六进制nn表示一个字符(n为0-f),如\x41表示'A'
\unnnn 以十六进制nnnn表示一个Unicode字符(n为0-f),如\u03a3表示希腊字符ε

  当字符串中包含引号,有三种解决方案

  [1]单引号中嵌入双引号

  [2]双引号中嵌入单引号

  [3]使用转义符"\"

console.log('"test"');//"test"
console.log("'test'");//'test'
console.log('\'test\'');//'test'

继承的方法
 
   String类型是与字符串对应的包装类型,继承了引用类型的通用方法

  valueOf()、toString()和toLocaleString():返回字符串表示

console.log("test".valueOf());//"test"
console.log("test".toString());//"test"
console.log("test".toLocaleString());//"test"

length属性
 
  String类型的每个实例都有一个length属性,表示字符的个数

  [注意]该属性只可读取,不可改变

var str = "test";
console.log(str.length);//4
str.length = 6;
console.log(str,str.length);//"test",4

String()方法
 
  String()方法的转换规则是:

  [1]如果值有toString()方法,则调用该方法(没有参数)并返回相应结果

  [2]null和undefined没有toString()方法,则返回null和undefined

console.log(undefined.toString())//报错
console.log(null.toString())//报错
console.log(String(undefined));//'undefined'
console.log(String(null));//'null'
console.log(String(true),String(false));//'true' 'false'
console.log(String(10.1));//10.1
console.log(String({}));//[object Ojbect]

  [注意]要把某个值转换为字符串,可以使用加号操作符把它与一个空字符串''加在一起

console.log(typeof (1 + ''),(1 + ''));//string '1'
console.log(typeof (undefined + ''),(undefined + ''));//string 'undefined'
console.log(typeof (null + ''),(null + ''));//string 'null'
console.log(typeof (true + ''),(true + ''));//string 'true'
console.log(typeof ({} + ''),({} + ''));//string '[object Object]'

访问字符方法
 
   接收一个基于0的字符位置的参数,并以单字符字符串的形式返回

charAt():返回给定位置的字符

  [注意]当参数为空时,默认参数为0;当参数超出范围时,则什么都不输出

var str = "hello";
console.log(str.charAt(1));//e
console.log(str.charAt(-1));//空
console.log(str.charAt(10));//空
console.log(str.charAt());//h

中括号加数字索引(ES5):返回给定位置的字符(IE7-不支持,输出undefined)

  [注意]当参数超出范围时,输出undefined;当参数为空时,报错

var str = "hello";
console.log(str[1]);//e
console.log(str[-1]);//undefined
console.log(str[10]);//undefined
console.log(str[]);//报错

charCodeAt():返回给定位置的字符编码,字符编码为Number类型

[注意]当参数为空时,默认参数为0;当参数超出范围时,则输出NaN

var str = "hello";
console.log(str.charCodeAt(1));//101
console.log(str.charCodeAt(-1));//NaN
console.log(str.charCodeAt(10));//NaN
console.log(str.charCodeAt());//104

String.fromCharCode():把一个或多个编码值转成一个字符串(静态方法)

[注意]参数范围为ASCII表的范围 

var stringValue = 'hello';
console.log(stringValue.charAt(1));//'e'
console.log(stringValue.charCodeAt(1));//101
console.log(typeof stringValue.charCodeAt(1));//'number'
console.log(String.fromCharCode(104,101,108,108,111));//'hello'
console.log(String.fromCharCode(0x6211,0x662f,0x5c0f,0x706b,0x67f4));//'我是小火柴'
console.log(stringValue[1]);//'e'

字符串拼接
 
concat():可以接受任意多个参数,用于将一个或多个字符串拼接起来,返回拼接得到的新字符串

+:加号操作符在多数情况下比concat()更简便

var stringValue = 'hello ';
console.log(stringValue.concat('world','!'));//'hello world!'
console.log(stringValue + 'world' + '!');//'hello world!'

创建字符串
 
   返回被操作字符串的一个子字符串,若无参数则返回原字符串。共substr、subtring和slice三种

substr(a,b):a->子字符串开始位置、b->子字符串长度(可选,默认到原字符串结束)

  设原字符串长度为len

  [1]当a>=len时,不输出

  [2]当 a<0 且 |a|<len 时,从后往前数,输出|a|个字符

  [3]当 a<0 且 |a|>= len 时,输出从(0)到(b)的位置

  [4]当 b<0 时,b = 0

  [5]当 b>= 可提供字符数时,以最大字符数输出

  [注意]IE8-在处理第一个参数为负值时存在问题,输出原字符串

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/38706af3bd107b702750a217b1bf2cd7.html