在javascript

时间:2017-11-12 17:31:52

标签: javascript ecmascript-6

我们有两个潜在的价值观:

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;风格的组件。

1 个答案:

答案 0 :(得分:3)

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

但是你的第一个value是一个字符串,而第二个是一个对象,这些很容易区分:

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