- Unicode表示法
- 模板字符串
- String.prototype.fromCodePoint()
- String.prototype.includes()
- String.prototype.startsWith()
- String.prototype.endsWith()
- String.prototype.repeat()
javascript
{
console.log("a", "\u0061"); // a a
console.log("s", "\u20BB7"); // s ₻7
console.log("s", "\u{20BB7}"); // s 𠮷
}
{
let s = "𠮷";
let s1 = "𠮷a";
// es5
console.log("length", s.length); // length 2
console.log("0", s.charAt(0)); // 0 �
console.log("0", s.charAt(1)); // 0 �
console.log("at0", s.charCodeAt(0)); // at0 55362
console.log("at1", s.charCodeAt(1)); // at1 57271
// es6
console.log("length", s1.length); // length 3
console.log("code0", s1.codePointAt(0)); // code0 134071
console.log("code0", s1.codePointAt(0).toString(16)); // code0 20bb7
console.log("code1", s1.codePointAt(1)); // code1 57271
console.log("code2", s1.codePointAt(2)); // code2 97
}
{
// es5
console.log(String.fromCharCode("0x20bb7")); // ஷ
// es6
console.log(String.fromCodePoint("0x20bb7")); // 𠮷
}
{
let str = "\u{20bb7}abc";
// es5
for (let i = 0; i < str.length; i++) {
console.log("es5", str[i]);
}
// es5 �
// es5 �
// es5 a
// es5 b
// es5 c
// es6
for (let code of str) {
console.log("es6", code);
}
// es6 𠮷
// es6 a
// es6 b
// es6 c
}
{
// includes():返回布尔值,表示是否找到了参数字符串。
// startsWith():返回布尔值,表示参数字符串是否在原字符串的头部。
// endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部。
let str = "string";
console.log("includes", str.includes("r")); // includes true
console.log("includes", str.includes("c")); // includes false
console.log("start", str.startsWith("str")); // start true
console.log("end", str.endsWith("str")); // end false
}
{
// repeat 方法返回一个新字符串,表示将原字符串重复n次。
let str = "abc";
console.log(str.repeat(2)); // abcabc
console.log('na'.repeat(0);); // ""
// 参数如果是小数,会被取整。
console.log('na'.repeat(2.9)); // "nana"
// 如果repeat的参数是负数或者Infinity,会报错。
console.log('na'.repeat(Infinity)); // RangeError
console.log('na'.repeat(-1)); // RangeError
// but 如果参数是 0 到-1 之间的小数,则等同于 0,这是因为会先进行取整运算。0 到-1 之间的小数,取整以后等于-0,repeat视同为 0。
console.log('na'.repeat(-0.9)); // ""
// 参数NaN等同于 0。
console.log('na'.repeat(NaN)); // ""
// 如果repeat的参数是字符串,则会先转换成数字。
console.log('na'.repeat('na')); // ""
console.log('na'.repeat('3')); // "nanana"
}
{
let name = "wuchendi";
let info = "hello world";
let m = `i am ${name},${info}`;
console.log(m); // i am wuchendi,hello world
}
{
// ES2017 引入了字符串补全长度的功能。如果某个字符串不够指定长度,会在头部或尾部补全。
// padStart()用于头部补全,padEnd()用于尾部补全。
console.log("1".padStart(2, "0")); // 01
console.log("1".padEnd(2, "0")); // 10
// 如果省略第二个参数,默认使用空格补全长度。
console.log("1".padStart(4)); // " 1"
console.log("1".padEnd(4)); // "1 "
// 用途
console.log("24".padStart(10,"YYYY-MM-DD")); // "YYYY-MM-24"
console.log("09-24".padStart(10,"YYYY-MM-DD")); // "YYYY-09-24"
}
{
// trimStart(),trimEnd()
// ES2019 对字符串实例新增了trimStart()和trimEnd()这两个方法。它们的行为与trim()一致,trimStart()消除字符串头部的空格,trimEnd()消除尾部的空格。它们返回的都是新字符串,不会修改原始字符串。
const s = " abc ";
console.log(s.trim()); // "abc";
console.log(s.trimStart()); // "abc ";
console.log(s.trimEnd()); // " abc";
}
{
// 标签模板
let user = {
name: "wcd",
info: "hello world"
};
console.log(abc`i am ${user.name},${user.info}`); // i am ,,,wcdhello world
function abc(s, v1, v2) {
console.log(s, v1, v2); // [ 'i am ', ',', '' ] 'wcd' 'hello world'
return s + v1 + v2;
}
}
{
// String.raw 方法往往用来充当模板字符串的处理函数,返回一个斜杠都被转义(即斜杠前面再加一个斜杠)的字符串,对应于替换变量后的模板字符串。
console.log(String.raw`Hi\n${1 + 2}`); // Hi\n3
console.log(`Hi\n${1 + 2}`); // Hi 3
}