MST

星途 面试题库

面试题:JavaScript 模板标签的元编程技巧及优化

创建一个高度优化的模板标签函数 `sqlQuery`,它可以接受多个字符串片段和变量,生成 SQL 查询语句。要求在生成查询语句时,对变量进行严格的类型检查和 SQL 注入防范,并且要利用 JavaScript 的元编程技巧来提高函数的通用性和性能,最后阐述在实际数据库操作场景中,这种实现方式相比传统字符串拼接的优势。
24.3万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
function sqlQuery(strings, ...values) {
    let query = '';
    for (let i = 0; i < strings.length; i++) {
        query += strings[i];
        if (i < values.length) {
            const value = values[i];
            if (typeof value === 'number') {
                query += value;
            } else if (typeof value ==='string') {
                query += `'${value.replace(/'/g, "\\\\'")}'`;
            } else {
                throw new Error('Unsupported value type for SQL query');
            }
        }
    }
    return query;
}

相比传统字符串拼接的优势

  1. 安全性
    • 传统字符串拼接容易受到 SQL 注入攻击,例如恶意用户输入 '; DROP TABLE users; -- 会导致数据库表被删除。而上述实现对字符串类型的值进行了单引号转义处理,有效防止了这种情况。
  2. 类型检查
    • 传统字符串拼接不会对变量类型进行检查,可能会导致错误的 SQL 语句。这里明确对传入的变量进行类型检查,只允许数字和字符串类型,提高了查询的正确性。
  3. 代码可读性和维护性
    • 模板标签函数使 SQL 查询语句结构更清晰,字符串片段和变量分开,相比复杂的字符串拼接,更易于理解和修改。