Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在帕格插值中,什么';使用缓冲代码和使用{..}之间的真正区别是什么?_Javascript_Node.js_Pug - Fatal编程技术网

Javascript 在帕格插值中,什么';使用缓冲代码和使用{..}之间的真正区别是什么?

Javascript 在帕格插值中,什么';使用缓冲代码和使用{..}之间的真正区别是什么?,javascript,node.js,pug,Javascript,Node.js,Pug,如插值公式中所述: -var title=“关于狗:人类最好的朋友”; -var author=“enlore”; -var theGreat=“逃跑!”; h1=标题 p由#{author}写的充满爱的作品 p这将是安全的:#{theGreat} title遵循评估本地模板的基本模式,但是{和}之间的代码被评估、转义,结果缓冲到正在渲染的模板的输出中 这可以是任何有效的Javascript表达式,因此您可以做任何感觉良好的事情 但是,h1=title中的缓冲代码仍然是“经过计算、转义、缓冲的

如插值公式中所述:

-var title=“关于狗:人类最好的朋友”;
-var author=“enlore”;
-var theGreat=“逃跑!”;
h1=标题
p由#{author}写的充满爱的作品
p这将是安全的:#{theGreat}
title
遵循评估本地模板的基本模式,但是
{
}
之间的代码被评估、转义,结果缓冲到正在渲染的模板的输出中

这可以是任何有效的Javascript表达式,因此您可以做任何感觉良好的事情

但是,
h1=title
中的缓冲代码仍然是“经过计算、转义、缓冲的…”,并且如上所述“支持全部JavaScript表达式”

那么有什么区别呢?我想不出来。

来自:

缓冲代码以
=
开头。它计算JavaScript表达式并输出结果。为了安全起见,缓冲代码首先被HTML转义

发件人:

{
}
之间的代码进行求值、转义,并将结果缓冲到正在呈现的模板的输出中

这可以是任何有效的Javascript表达式,因此您可以做任何感觉良好的事情

因此,他们都:

  • 对JavaScript表达式求值
  • 逃避它
  • 将其输出/缓冲到输出中
  • 也就是说,他们都做同样的事情。那用哪一个呢?我的直觉是:

    • 如果整行是JavaScript表达式,则使用缓冲代码
    • 如果一行中只有一部分是JavaScript表达式,则使用字符串插值
    例如:

    // Normal JS variables
    - const name = 'John'
    - const greeting = `Hello ${name}!`
    
    // Buffered code
    p= greeting                 // 1
    p= 'Hello ' + name + '!'    // 2
    p= `Hello ${name}!`         // 3
    
    // Interpolation
    p Hello #{name}!            // 4
    p #{greeting}               // 5
    p #{'Hello ' + name + '!'}  // 6
    p #{`Hello ${name}!`}       // 7
    
    // Output in all cases:
    <p>Hello John!</p>
    
    //普通JS变量
    -const name='John'
    -const greeting=`Hello${name}`
    //缓冲代码
    p=问候语//1
    p='Hello'+name+'!'//2.
    p=`Hello${name}!`//3.
    //插值
    p你好#{name}!/4.
    欢迎//5
    p{'Hello'+name+!'}//6
    p{`Hello${name}!`}//7
    //所有情况下的输出:
    你好,约翰

    请注意,数字3和7使用。不要与帕格的字符串插值(数字4-7)混淆

    我认为:

    • 数字1、3和4是最好的选择
    • 数字2是可以的,但是使用模板文字会更好(数字3)
    • 数字5–7是有效的,但可能有点不必要–这些行在
      {
      }
      中只包含JS表达式,因此为了清晰起见,您最好使用缓冲代码。(但你可能更喜欢它们,这很好。这是个人喜好的问题。)

    好的,很好的解释,但是文档中的“但是”(在“但是{和}…”之间的代码中)让我感到困惑。似乎他们想要增强使用缓冲代码和字符串插值之间的区别。但是,正如我们所看到的,他们在做同样的事情……嗯,我明白了。这也可能只是一个不完美的词语选择。你可以试着打开一个问题询问帕格的GitHub回购协议。如果你问了问题并得到了答案,记得在这里报告。:-)
    // Normal JS variables
    - const name = 'John'
    - const greeting = `Hello ${name}!`
    
    // Buffered code
    p= greeting                 // 1
    p= 'Hello ' + name + '!'    // 2
    p= `Hello ${name}!`         // 3
    
    // Interpolation
    p Hello #{name}!            // 4
    p #{greeting}               // 5
    p #{'Hello ' + name + '!'}  // 6
    p #{`Hello ${name}!`}       // 7
    
    // Output in all cases:
    <p>Hello John!</p>