标签:
String对象
本文参考MDN做的详细整理,方便大家参考[MDN](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript)
JavaScript中的 String 类型用于表示文本型的数据. 它是由无符号整数值(16bit)作为元素而组成的集合. 字符串中的每个元素在字符串中占据一个位置. 第一个元素的index值是0, 下一个元素的index值是1, 以此类推. 字符串的长度就是字符串中所含的元素个数.
String 对象是对原始string类型的封装,你可以在String字面值上使用String对象的任何方法—JavaScript自动把String字面值转换为一个临时的String对象, 然后调用其相应方法,最后丢弃此临时对象.在String字面值上也可以使用String.length属性
访问字符串的单个字符方法:
return ‘cat‘.charAt(1); // returns "a"
return ‘cat‘[1]; // returns "a"
使用括号访问字符串不可以对其进行删除或添加,因为对应属性并不是可读或可写的。
String(thing)
new String(thing)
字符串比较:可以用‘>’ 或‘<‘来对两个字符、字符串进行比较。
除了普通的可打印字符以外,一些特殊的字符可以通过其转义形式放入字符串中:
‘\u{2F804}‘
// the same with simple Unicode escapes
‘\uD87E\uDC04‘
String对象的方法(各个方法详解见本文底部)
模板字符串:ES6新特性
模板字符串允许嵌入表达式,并且支持多行字符串和字符串插补特性。
语法
`string text`
`string text line 1
string text line 2`
`string text ${expression} string text`
tag `string text ${expression} string text`
模板字符串使用反引号 (` `) 来代替普通字符串中的用双引号和单引号。模板字符串可以包含特定语法(${expression})的占位符。占位符中的表达式和周围的文本会一起传递给一个默认函数,该函数负责将所有的部分连接起来,如果一个模板字符串由表达式开头,则该字符串被称为带标签的模板字符串,该表达式通常是一个函数,它会在模板字符串处理后被调用,在输出最终结果前,你都可以在通过该函数对模板字符串来进行操作处理。
多行字符串、表达式插补
使用普通字符串,换行需要\n,插入表达式需要分段:
var a = 5;
var b = 10;
console.log("Fifteen is " + (a + b) + " and\nnot " + (2 * a + b) + ".");
// "Fifteen is 15 and
// not 20."
var a = 5;
var b = 10;
console.log(`Fifteen is ${a + b} and
not ${2 * a + b}.`);
// "Fifteen is 15 and
// not 20."
带标签的模板字符串
模板字符串的一种更高级的形式称为带标签的模板字符串。它允许您通过标签函数修改模板字符串的输出。标签函数的第一个参数是一个包含了字符串字面值的数组(在本例中分别为“Hello”和“world”);第二个参数,在第一个参数后的每一个参数,都是已经被处理好的替换表达式(在这里分别为“15”和“50”)。 最后,标签函数返回处理好的字符串。在后面的示例中,标签函数的名称可以为任意的合法标示符。
var a = 5;
var b = 10;
function tag(strings, ...values) {
console.log(strings[0]); // "Hello "
console.log(strings[1]); // " world "
console.log(values[0]); // 15
console.log(values[1]); // 50
return "Bazinga!";
}
tag`Hello ${ a + b } world ${ a * b}`;
// "Bazinga!"
原始字符串
在标签函数的第一个参数中,存在一个特殊的属性raw ,我们可以通过它来访问模板字符串的原始字符串。
function tag(strings, ...values) {
console.log(strings.raw[0]);
// "string text line 1 \\n string text line 2"
}
tag`string text line 1 \n string text line 2`;
另外,使用String.raw() 方法创建原始字符串和使用默认模板函数和字符串连接创建是一样的。
String.raw`Hi\n${2+3}!`;
// "Hi\\n5!"
安全性
由于模板字符串能够访问变量和函数,因此不能由不受信任的用户来构造。
`${console.warn("this is",this)}`; // "this is" Window
let a = 10;
console.warn(`${a+=20}`); // "30"
console.warn(a); // 30
String对象的方法:
静态方法
String.fromCharCode(num1, ..., numN)
根据指定的 Unicode 编码中的序号值来返回一个字符串,该方法返回一个字符串,而不是一个 String 对象。
String.fromCodePoint(num1[, ...[, numN]]) ES6
使用指定的unicode参数返回一个primitive的字符串。与fromCharCode功能类似,但是支持的Unicode字符更全,但是浏览器支持情况不是太好,目前ie以及safari还不支持。另外,性能并没有fromCharCode快。因为是ES6当中的新定义的特性,所以目前还不适合放到正式产品环境中去使用。
String.raw(callSite, ...substitutions) ES6
是一个模板字符串的标签函数,是用来获取一个模板字符串的原始字面量值的。
如果第一个参数没有传入一个格式良好的调用点对象,则会抛出 TypeError 异常。
像所有的标签函数一样,你通常不需要把它看成一个普通函数,你只需要把它放在模板字符串前面就可以了,而不是在它后面加个括号和一堆参数来调用它,引擎会替你去调用它:
String.raw `Hi\n!`;
// "Hi\\n!",这里得到的不是 Hi 后面跟个换行符,而是跟着 \\ 和 n 两个字符
String.raw `Hi\u000A!`;
// "Hi\\u000A!",同上,这里得到的会是 \\、u、0、0、0、A 6个字符,
// 任何类型的转义形式都会失效,保留原样输出,不信你试试.length
let name = "Bob";
String.raw `Hi\n${name}!`;
// "Hi\\nBob!",内插表达式还可以正常运行
String.raw({raw: "test"}, 0, 1, 2);
// "t0e1s2t",我认为你通常不需要把它当成普通函数来调用
跟HTML无关的方法
String.prototype.charAt(index)
返回字符的特定位置,index :0~length-1。如果指定的 index 值超出了该范围,则返回一个空字符串。
String.prototype.charCodeAt(index)
返回表示给定索引的字符的Unicode的值。是String.fromCharCode()方法的反操作
String.prototype.concat(string2, string3[, ..., stringN])
将一个或多个字符串与原字符串连接合并,形成一个新的字符串并返回。concat 方法并不影响原字符串。
String.prototype.indexOf(searchValue[, fromIndex])
从字符串对象中返回首个被发现的给定值的索引值,如果没有找到则返回-1。indexOf 方法区分大小写
String.prototype.lastIndexOf(searchValue[, fromIndex])
从字符串对象中返回最后一个被发现的给定值的索引值,如果没有找到则返回-1。
String.prototype.localeCompare(compareStr[, locales[, options]]) 新的 locales 、 options 参数要求IE11,Safari不支持
返回一个数字来表明调用该函数的字符串的排列顺序是否在某个给定的字符串compareStr的前面或者后面,或者是一样的(编码中的位置)。在 compareStr 前面时返回负数,作 compareStr 后面时返回正数,相同位置时返回0
String.prototype.match(regexp)
使用正则表达式与字符串相比较,返回一个包含匹配结果的数组,如果没有匹配项,则返回 null。当字符串匹配到正则表达式时,match() 方法会提取匹配项。
String.prototype.replace(regexp|substr, newSubStr| function)
被用来在正则表达式和字符串直接比较,然后用新的子串来替换被匹配的子串。该方法并不改变调用它的字符串本身,而只是返回一个新的替换后的字符串。
使用字符串作为参数: 替换字符串newSubStr可以插入下面的特殊变量名:
下面的例子交换一个字符串中两个单词的位置,这个脚本使用$1 和 $2 代替替换文本
var re = /(\w+)\s(\w+)/;
var str = "John Smith";
var newstr = str.replace(re, "$2, $1");
console.log(newstr);
你可以指定一个函数作为第二个参数。在这种情况下,当匹配执行后, 该函数就会执行。 函数的返回值作为替换字符串。 (注意: 上面提到的特殊替换参数在这里不能被使用。) 另外要注意的是, 如果第一个参数是正则表达式, 并且其为全局匹配模式, 那么这个方法将被多次调用, 每次匹配都会被调用。
下面是该函数的参数:
(精确的参数个数依赖于replace()的第一个参数是否是一个正则表达式对象, 以及这个正则表达式中指定了多少个括号子串。)下面的例子使 newString 变成‘abc - 12345 - #$*%‘:
function replacer(match, p1, p2, p3, offset, string) {
// p1 is nondigits, p2 digits, and p3 non-alphanumerics
return [p1, p2, p3].join(‘ - ‘);
}
var newString = ‘abc12345#$*%‘.replace(/([^\d]*)(\d*)([^\w]*)/, replacer);
String.prototype.search(regexp)
对正则表达式和指定字符串进行匹配搜索,返回第一个出现的匹配项的下标。如果匹配成功,则 search() 返回正则表达式在字符串中首次匹配项的索引。否则,返回 -1。如果参数是字符串,和indexOf方法一样
String.prototype.slice(beginSlice[, endSlice])
摘取一个字符串区域(从beginSlice到endSlice,不含endSlice),,返回一个新的字符串。
String.prototype.split([separator][, limit])
通过separator将字符串分离成子串,返回由子串组成的数组。
String.prototype.substr(start[, length])
返回字符串中从指定位置开始的指定长度的子字符串.
String.prototype.substring(indexStart[, indexEnd])
返回字符串两个索引之间(或到字符串末尾)的子串。
substring 提取从 indexStart 到 indexEnd(不包括)之间的字符。特别地:
String.prototype.toLocaleLowerCase()
根据当前区域设置,将符串中的字符转换成小写。对于大多数语言来说,toLowerCase的返回值是一致的。
String.prototype.toLocaleUpperCase()
根据当前区域设置,将字符串中的字符转换成大写,对于大多数语言来说,toUpperCase的返回值是一致的。
String.prototype.toLowerCase()
将字符串转换成小写并返回。
返回用字符串表示的特定对象。重写 Object.prototype.toString 方法。
String.prototype.toUpperCase()
将字符串转换成大写并返回。
返回一个删除了字符串两端的空白字符的新字符串,包括所有的空格字符 (space, tab, no-break space 等)以及所有的行结束符(如 LF,CR)。
兼容写法:
if (!String.prototype.trim) {
String.prototype.trim = function () {
return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ‘‘);
};
}
返回特定对象的原始值。重写 Object.prototype.valueOf 方法。
HTML wrapper methods
下面的方法被限制使用,因为只对可用的HTML表情和属性提供部分支持。
String.prototype.startsWith(searchString [, position]) ES6 IE无 有Polyfill
判断字符串的起始位置是否匹配其他字符串中的字符。
String.prototype.endsWith(searchString [, position]) ES6
判断当前字符串是否是以另外一个给定的子字符串“结尾”的。可选的position 在 str 中搜索 子串searchString 的结束位置,默认值为 str.length,也就是真正的字符串结尾处。
String.prototype.codePointAt() ES6
返回使用UTF-16编码的给定位置的值的非负整数。
String.prototype.includes(searchString[, position]) ES6
判断一个字符串是否包含另一个子字符串,如果是返回true,否则返回false。position 可选,从当前字符串的哪个索引位置开始搜寻子字符串;默认为0。includes() 是区分大小写的。Polyfill:
if (!String.prototype.includes) {
String.prototype.includes = function(search, start) {
‘use strict‘;
if (typeof start !== ‘number‘) {
start = 0;
}
if (start + search.length > this.length) {
return false;
} else {
return this.indexOf(search, start) !== -1;
}
};
}
String.prototype.normalize() ES6
返回调用字符串值的Unicode标准化形式。
String.prototype.repeat(count) ES6 有Polyfill
构造并返回一个重复当前字符串若干次数的新字符串对象。count 介于0和正无穷大之间的整数 : [0, +∞) 。表示在新构造的字符串中重复了多少遍原字符串。
下面的方法被限制使用,因为只对可用的HTML表情和属性提供部分支持:
创建一个 <a> HTML 锚元素,被用作超文本靶标,name表示被创建的标签的 name 属性。
<a name="name"> text</a>
创建 HTML 元素 “b”,并将字符串加粗展示。将一个字符串嵌入到<b></b>标记中
使用 link 方法创建一个超链接 HTML 片段。返回的字符串可以通过 document.write 或 element.innerHTML 方法添加到文档中。
标签:
原文地址:http://www.cnblogs.com/susufufu/p/5848847.html