javascript如何判断浏览器是否支持``引号?

javascript新版本中,允许使用多行文本引号

var html = `
<div></div>
<div></div>
`;

有没有方法可以判断浏览器是否支持这个引号呢?

阅读 5.7k
4 个回答

以上三个答案中只有 @不爱吃西红柿的鱼 君的是正确的。

这里补充一下为什么另外两个是错误的原因。

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());
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());

try一下

try{
    var html = `
        <div></div>
        <div></div>
        `;
}catch(e){
    
}

这是es6的特性,判断可以用

try{
var a = 1, b = `c${a}d`;
//support
}
catch(e){
// not support
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题