javascript基础学习系列十八:原始字符串

使用模板字面量也可以直接获取原始的模板字面量内容(如换行符或 Unicode 字符),而不是被转 换后的字符表示。为此,可以使用默认的 String.raw 标签函数:

  // 换行符示例
console.log(`first line\nsecond line`); // first line
// second line
console.log(String.raw`first line\nsecond line`); // "first line\nsecond line"
// 对实际的换行符来说是不行的
// 它们不会被转换成转义序列的形式 console.log(`first line

另外,也可以通过标签函数的第一个参数,即字符串数组的.raw 属性取得每个字符串的原始内容:

    function printRaw(strings) {
    
    
      console.log('Actual characters:');
      for (const string of strings) {
    
    
        console.log(string);
      }
      console.log('Escaped characters;');
      for (const rawString of strings.raw) {
    
    
        console.log(rawString);
      }
}
printRaw`\u00A9${
      
       'and' }\n`; // Actual characters:
// ©
//(换行符)
    // Escaped characters:
    // \u00A9
    // \n

1. Symbol类型:

Symbol(符号)是 ECMAScript 6 新增的数据类型。符号是原始值,且符号实例是唯一、不可变的。 符号的用途是确保对象属性使用唯一标识符,不会发生属性冲突的危险。

尽管听起来跟私有属性有点类似,但符号并不是为了提供私有属性的行为才增加的(尤其是因为 Object API 提供了方法,可以更方便地发现符号属性)。相反,符号就是用来创建唯一记号,进而用作非 字符串形式的对象属性。

符号需要使用 Symbol()函数初始化。因为符号本身是原始类型,所以 typeof 操作符对符号返回 symbol。

  let sym = Symbol();
    console.log(typeof sym); // symbol

调用 Symbol()函数时,也可以传入一个字符串参数作为对符号的描述(description),将来可以通 过这个字符串来调试代码。但是,这个字符串参数与符号定义或标识完全无关:

let genericSymbol = Symbol();
    let otherGenericSymbol = Symbol();
    let fooSymbol = Symbol('foo');
    let otherFooSymbol = Symbol('foo');
console.log(genericSymbol == otherGenericSymbol);  // false

符号没有字面量语法,这也是它们发挥作用的关键。按照规范,你只要创建 Symbol()实例并将其 用作对象的新属性,就可以保证它不会覆盖已有的对象属性,无论是符号属性还是字符串属性。

let genericSymbol = Symbol();
console.log(genericSymbol);  // Symbol()
let fooSymbol = Symbol('foo');
console.log(fooSymbol);      // Symbol(foo);

最重要的是,Symbol()函数不能与 new 关键字一起作为构造函数使用。这样做是为了避免创建符 号包装对象,像使用 Boolean、String 或 Number 那样,它们都支持构造函数且可用于初始化包含原 始值的包装对象:

猜你喜欢

转载自blog.csdn.net/wanmeijuhao/article/details/135442502