任何一组字符(字母、数字、符号等),介于双引号 ("
)、单引号 ('
) 或反引号 (`) 之间,都是字符串原语。您在本课程中已经看过一些字符串示例:上一个模块中 console.log
的实例包含字符串原语。
console.log( "Hello, World." );
> Hello, World.
"Hello, World."
是一个字符串原语。使用单引号或反引号也能得到相同的结果
console.log( 'Hello, World.' );
> Hello, World.
console.log(`Hello, World.`);
> Hello, World.
用引号括起来的一系列字符称为字符串字面量。双引号和单引号的行为方式相同,并且一个可以包含另一个作为字符串本身的字符
console.log( "I'm a string." );
> I'm a string.
console.log( '"A string," I said.' );
> "A string," I said.
字符串中相同封闭字符的实例会“关闭”字符串,很可能会导致错误
console.log( '"I'm a string," I said.' );
> Uncaught SyntaxError: missing ) after argument list
为了避免这种情况,请使用反斜杠 (\
) 转义字符
console.log( '"I\'m a string," I said.' );
> "I'm a string," I said.
字符串对象
当作为函数调用时,String
对象会将指定的值强制转换为字符串字面量。
let myString = String( 10 );
myString
> "10"
typeof myString
> string
正如原型继承中详细介绍的那样,您很少需要将 String
对象用作构造函数。它会创建一个包含指定值的字符串对象,以及 String
对象已提供的各种方法和属性,而不是字符串字面量。
let stringObj = new String( "My new string." );
typeof stringObj
> object
stringObj
> String { "My new string." }
串联
当在字符串而不是数字的上下文中使用时,单个加号 (+
) 充当串联运算符,将多个字符串值组合成一个字符串
console.log( "My" + " string." );
> My string.
字符串字面量和模板字面量
单引号、双引号和反引号可以互换使用,以创建字符串原语。但是,您也可以使用反引号来指定模板字面量(有时称为“模板字符串”)。与单引号或双引号创建的字符串字面量不同,模板字面量允许使用多行字符串和字符串插值。
const myString = "This
is a string.";
> Uncaught SyntaxError: "" string literal contains an unescaped line break
const myString = `This
is a string.`;
console.log( myString );
> This
is a string.
模板字面量可以包含由美元符号和花括号 (${}
) 标记的占位符表达式。这些占位符默认情况下是“插值的”,这意味着表达式的结果会替换最终字符串中的占位符。
console.log( "The result is " + ( 2 + 4 ) + "." );
> The result is 6.
console.log( `The result is ${ 2 + 4 }.` );
> The result is 6.
可以将模板字面量传递给自定义函数以创建标记模板,这是一种函数调用,它使用单个模板字面量作为一组参数,并让其占位符根据作者定义的逻辑进行填充。
标记函数的第一个参数包含一个字符串值数组,其余参数定义占位符。此字符串值数组是通过在每个占位符处“拆分”模板字面量来创建的。数组中的第一个元素包含直到第一个占位符的所有字符,第二个元素包含第一个和第二个占位符之间的所有字符,依此类推。每个占位符都作为具有关联占位符的独立值传递给标记函数。
const myNoun = "template literal";
function myTagFunction( myStrings, myPlaceholder ) {
const myInitialString = myStrings[ 0 ];
console.log( `${ myInitialString }modified ${ myPlaceholder }.` );
}
myTagFunction`I'm a ${ myNoun }.`;
> "I'm a modified template literal."
检查您的理解情况
哪个字符用于转义字符?
∖
)"
)/
)哪个字符用于串联?
+
&
.