检测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”
?