【发布时间】:2017-11-13 03:36:04
【问题描述】:
我们有两个潜在的价值:
const value = `Hello World`;
和
const value = {message: 'Hello World'};
我想要做的是有条件的 where
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 和样式化的组件有关。
【问题讨论】:
-
value1是一个字符串,value2是一个对象,value2.message是一个字符串;value1和value2.message在运行时没有区别。 -
@PA。考虑到 JS 不是一种编译语言,我认为这并不完全正确。 @user3591425:如果您将其更改为
String.raw({raw: value})它应该可以工作,尽管它会为字符串文字和模板文字返回一个值 -
@user184994 不,这不起作用。顺便说一句,解释引擎和 jit 编译引擎之间没有明确的区别 - javascript 是 just a language。
-
@user184994 知道了!有用。谢谢!
-
@user184994 不太清楚你在说什么建议。以什么方式起作用?为什么不直接查看
typeof value === "string"?