Javascript学习---String类型

在Javascript里,所有的文本数据都以String的类型存储,它没有单个的字符类型。String类型的数据默认以UTF-16的格式存储,跟页面编码没有关系。


引号

Javascript声明一个字符串有三种形式,分别是单引号、双引号和反引号,例如:
let single = 'single-quoted';
let double = "double-quoted";

let backticks = `backticks`;
单引号和双引号本质上是一样的,反引号主要用来在字符串里嵌套表达式,例如:

function sum(a, b) {
  return a + b;
}

alert(`1 + 2 = ${sum(1, 2)}.`); // 1 + 2 = 3.
使用反引号的另外一个好处就是字符串内容可以跨越多行,例如:
let guestList = `Guests:
 * John
 * Pete
 * Mary
`;

alert(guestList); // a list of guests, multiple lines
这样的话,输出内容的格式就和你声明的字符串格式一样,但如果使用单引号或者双引号来实现跨行的话就会报错,例如:
let guestList = "Guests:  // Error: Unexpected token ILLEGAL
  * John";

特殊字符

反引号可以轻松实现换行,当然单引号或则双引号也可以,只不过要是用一个特殊字符--换行符"\n",例如下面这两个例子运行的结果是一样的:
alert( "Hello\nWorld" ); // two lines using a "newline symbol"

// two lines using a normal newline and backticks
alert( `Hello
World` );
当然还有其他的特殊字符,例如"\b"表示空格,"\t"表示tab键,具体可以参考相关文档。


字符串的长度

string有个内置的属性length,用来返回字符串的长度,例如:
alert( `My\n`.length ); // 3
这里要注意的是.length是一个数字类型的属性,并不是方法。


访问单个字符

为了访问字符串里的某个字符,我们可以使用str[pos]的形式,或则调用方法str.charAt(pos),例如:
let str = `Hello`;

// the first character
alert( str[0] ); // H
alert( str.charAt(0) ); // H

// the last character
alert( str[str.length - 1] ); // o
字符串的索引默认从0开始的,str[pos]的形式如果没有找到字符则会放回undefined,而str.charAt(pos)则会返回空字符串,例如:
let str = `Hello`;

alert( str[1000] ); // undefined
alert( str.charAt(1000) ); // '' (an empty string)
我们也可以使用迭代的方式来访问字符,如下:
for (let char of "Hello") {
  alert(char); // H,e,l,l,o (char becomes "H", then "e", then "l" etc)
}

字符串是不可变的

字符串在javascript里面是不能改变的,我们不能改变字符串的某个字符,例如:

let str = 'Hi';

str[0] = 'h'; // error
alert( str[0] ); // doesn't work
通常的办法是创建一个新的字符串然后将旧的字符串指向它,比如:
let str = 'Hi';

str = 'h' + str[1];  // replace the string

alert( str ); // hi

改变字符串的大小写

字符串的大小写可以使用toLowerCase()或者toUpperCase(),例如:
alert( 'Interface'.toUpperCase() ); // INTERFACE
alert( 'Interface'.toLowerCase() ); // interface
改变某个索引号的字符如下:
alert( 'Interface'[0].toLowerCase() ); // 'i'

查找子字符串

str.indexOf(substr,pos)
该方法substr表示要查找的子字符串,pos表示索引位置,若找到子字符串则返回它出现的索引号,如果没找到就返回-1,例如:
let str = 'Widget with id';

alert( str.indexOf('Widget') ); // 0, because 'Widget' is found at the beginning
alert( str.indexOf('widget') ); // -1, not found, the search is case-sensitive

alert( str.indexOf("id") ); // 1, "id" is found at the position 1 (..idget with id)
let str = 'Widget with id';

alert( str.indexOf('id', 2) ) // 12
str.lastIndexOf(substr,pos)
与indexOf()方法相似,只不过是从字符串的尾部向头部查找,例如:
'canal'.lastIndexOf('a');     // returns 3
'canal'.lastIndexOf('a', 2);  // returns 1
'canal'.lastIndexOf('a', 0);  // returns -1
'canal'.lastIndexOf('x');     // returns -1
'canal'.lastIndexOf('c', -5); // returns 0
'canal'.lastIndexOf('c', 0);  // returns 0
'canal'.lastIndexOf('');      // returns 5
'canal'.lastIndexOf('', 2);   // returns 2
includes, startsWith, endsWith方法
str.includes(substr, pos)用于查看是否包含子串,若包含则返回true,否则返回false
alert( "Widget with id".includes("Widget") ); // true

alert( "Hello".includes("Bye") ); // false
alert( "Midget".includes("id") ); // true
alert( "Midget".includes("id", 3) ); // false, from position 3 there is no "id"
startsWith, endsWith看例子:
alert( "Widget".startsWith("Wid") ); // true, "Widget" starts with "Wid"
alert( "Widget".endsWith("get") );   // true, "Widget" ends with "get"

截取子字符串

javascript有三个内置方法来实现子字符串的截取
str.slice(start [, end])
let str = "stringify";
alert( str.slice(0, 5) ); // 'strin', the substring from 0 to 5 (not including 5)
alert( str.slice(0, 1) ); // 's', from 0 to 1, but not including 1, so only character at 0

let str = "stringify";
alert( str.slice(2) ); // ringify, from the 2nd position till the end

let str = "stringify";
// start at the 4th position from the right, end at the 1st from the right
alert( str.slice(-4, -1) ); // gif
str.substring(start [, end])
let str = "stringify";

// these are same for substring
alert( str.substring(2, 6) ); // "ring"
alert( str.substring(6, 2) ); // "ring"

// ...but not for slice:
alert( str.slice(2, 6) ); // "ring" (the same)
alert( str.slice(6, 2) ); // "" (an empty string)
str.substr(start [, length])
let str = "stringify";
alert( str.substr(2, 4) ); // ring, from the 2nd position get 4 characters

let str = "stringify";
alert( str.substr(-4, 2) ); // gi, from the 4th position get 2 characters

字符串比较

javascript按照字符顺序对字符串进行比较,比较两个字符的大小是按编码集(UTF-16)的编码值为依据
alert( 'a' > 'Z' ); // true
alert( 'Österreich' > 'Zealand' ); // true
我们可以调用str.codePointAt(pos)来获取字符在编码集(UTF-16)的编码值,例如:
// different case letters have different codes
alert( "z".codePointAt(0) ); // 122
alert( "Z".codePointAt(0) ); // 90
也可以调用String.fromCodePoint(code)获取编码值对应的字符,例如:
alert( String.fromCodePoint(90) ); // Z
还有一种方式是使用"\u"字符来获取编码值对应的字符,\u后边写的是十六进制格式的编码值。例如:
// 90 is 5a in hexadecimal system
alert( '\u005a' ); // Z
正确的字符串比较方案
由于不用的语言会有不同的编码集,不过好消息是所有的现代浏览器都支持国际编码集ECMA 402,故我们可以使用str.localeCompare(str2)来进行字符串比较,若大于返回1,小于返回-1,等于返回0,例如:
alert( 'Österreich'.localeCompare('Zealand') ); // -1







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值