javascript新版本中,允许使用多行文本引号
var html = `
<div></div>
<div></div>
`;
有没有方法可以判断浏览器是否支持这个引号呢?
网友回答:
_CRY 2016-10-29 11:18 回复:
已被采纳
以上三个答案中只有 @不爱吃西红柿的鱼 君的是正确的。
这里补充一下为什么另外两个是错误的原因。
JavaScript 具有两种类型的错误。JavaScript 语法定义了一些错误在编译时报错,而所有其他错误则在运行时报错。
https://github.com/getify/You... 写到,
特殊的,一直以来有很多需要被捕获和报告为 “早期错误” 的特定条件 (在编译期)。任何直截了当的句法错误是早期错误 (e.g.,
a = ,
), 然而语法也定义了一些句法上有效但仍然不允许的东西。由于你的代码仍未执行,这些错误无法用
try..catch
捕获; 他们直接在你的程序的解析/编译阶段失败。
而根据 https://github.com/getify/You... 所补充,
在你的程序中具有一个句法错误阻止它运行,而这也阻止你的程序随后根据此特性是否受支持而做出不同响应。
为了通过对句法相关特性进行特性检测而元编程,我们需要一种方式以把测试从我们的程序运行所在的初始编译步骤中隔离出来。比如说,如果我们可以把测试用代码存储在一个字符串中,那么 JS 引擎就不会默认试着编译字符串的内容,直到我们要求它这样做。
你准备直接用
eval(..)
了么?没这么快。参见本系列的 Scope & Closures 部分以获取为什么
eval(..)
是个坏主意。然而还有一个具有更少负面效应的选项:Function(..)
构造函数。
以下是我修改的 @不爱吃西红柿的鱼 的答案 (把 eval
换成 new Function
):
function supportStrTpl(argument) {
var support = false;
try {
new Function('let a = 1; (`${a}b`)');
support = true;
} catch (e) {
console.log(e)
}
return support;
}
console.log(supportStrTpl());
-
_CRY 2017-2-17 3:17 回复:_CRY
注意这里 Function 只被创建而并没有真正得到执行,因此不会有任何除了检测句法功能之外的副作用。
-
不爱吃西红柿的鱼 2016-10-31 11:29 回复:_CRY
eval的效率也不一定慢,哈哈
不爱吃西红柿的鱼 2016-10-28 6:30 回复:
function supportStrTpl(argument) { let support = false; try { eval('let a = 1; (`${a}b`)'); support = true; } catch (e) { console.log(e) } return support;
}
console.log(supportStrTpl());
jsoncode 2016-10-28 8:09 回复:不爱吃西红柿的鱼
新思路,回去试一下,先谢谢你啊!
yunkehe 2016-10-28 2:47 回复:
try一下
try{
var html = `
<div></div>
<div></div>
`;
}catch(e){
}
jsoncode 2016-10-28 5:11 回复:yunkehe
试过了,不行
穗乃果 2016-10-28 2:48 回复:
这是es6的特性,判断可以用
try{
var a = 1, b = `c${a}d`;
//support
}
catch(e){
// not support
}