Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.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_Ecmascript 6 - Fatal编程技术网

检测javascript中的模板文本

检测javascript中的模板文本,javascript,ecmascript-6,Javascript,Ecmascript 6,我们有两个潜在价值: const value = `Hello World`; 及 我想做的是有条件的 if(is template literal) { // Some code } else { // Some code } 我试过使用 if(String.raw(value)){ } else { } 但是对象抛出一个类型错误。有没有人有一种简单可靠的方法来检测javascript中的模板文本 编辑:这里有一些进一步的澄清,供提问者参考 const example

我们有两个潜在价值:

const value = `Hello World`;

我想做的是有条件的

if(is template literal) {
    // Some code
} else {
    // Some code
}
我试过使用

if(String.raw(value)){

} else {

}
但是对象抛出一个类型错误。有没有人有一种简单可靠的方法来检测javascript中的模板文本

编辑:这里有一些进一步的澄清,供提问者参考

const exampleFunc = (value) => {
    // If I pass a string or template literal return as is
    if (String.raw({raw: value})) return value;

    const css = arr(styles).reduce((acc, obj) => {
        // Passing an object handles a more complicated set of operations
    }

}
在我使用之前 if(String.raw(value))返回值

这里发生的是它给了我一个类型错误,而不是给我null。通过将{raw:value}传递给String.raw解决了这个问题,现在我可以检测它是字符串/模板文本还是对象


关于我为什么要这样做的解释是一个较长的故事,与React&styled组件有关。

使用字符串文本和模板文本之间没有区别(显然,在源代码级别上除外)

但是第一个
值是一个字符串,而第二个是一个对象,很容易区分:

if (typeof value == "string") {
    console.log(value)
} else if (typeof value == "object" && typeof value.message == "string") {
    console.log(value.message)
}

使用字符串文字和模板文字之间没有区别(显然,在源代码级别上除外)

但是第一个
值是一个字符串,而第二个是一个对象,很容易区分:

if (typeof value == "string") {
    console.log(value)
} else if (typeof value == "object" && typeof value.message == "string") {
    console.log(value.message)
}

value1
是字符串,
value2
是对象,
value2.message
是字符串;运行时,
value1
value2.message
之间没有区别。@PA.考虑到JS不是一种编译语言,我不认为这完全正确@user3591425:如果您将其更改为
String.raw({raw:value})
,它应该可以工作,尽管它将为字符串文本和模板返回一个值literals@user184994不,那不行。顺便说一句,解释引擎和jit编译引擎之间没有明确的区别——javascript就是这样。@user184994明白了!它起作用了。谢谢大家!@用户184994不太清楚你的建议是什么意思。这在什么方面起作用?为什么不直接检查
typeof value==“string”
value1
是一个字符串,
value2
是一个对象,
value2.message
是一个字符串;运行时,
value1
value2.message
之间没有区别。@PA.考虑到JS不是一种编译语言,我不认为这完全正确@user3591425:如果您将其更改为
String.raw({raw:value})
,它应该可以工作,尽管它将为字符串文本和模板返回一个值literals@user184994不,那不行。顺便说一句,解释引擎和jit编译引擎之间没有明确的区别——javascript就是这样。@user184994明白了!它起作用了。谢谢大家!@用户184994不太清楚你的建议是什么意思。这在什么方面起作用?为什么不直接检查
typeof value==“string”