Skip to content
  • 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
}