我们有两个潜在的价值观:
const value = `Hello World`;
和
const value = {message: '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))返回值;
这里发生的事情是它给了我一个类型错误而不是把我归零。通过将{raw:value}传递给String.raw而不是解决问题,我现在可以检测它是字符串/模板文字还是对象。
澄清为什么我这样做是一个更长的故事,与React& amp;风格的组件。
答案 0 :(得分:3)
使用字符串文字和模板文字之间没有区别(显然,在源代码级别除外)。
但是你的第一个value
是一个字符串,而第二个是一个对象,这些很容易区分:
if (typeof value == "string") {
console.log(value)
} else if (typeof value == "object" && typeof value.message == "string") {
console.log(value.message)
}