Замена оператора «на» в строгом режиме

#javascript #vue.js

#javascript #vue.js

Вопрос:

У меня есть строковое значение, которое ввел пользователь, например, переменная f.

 f = "1/log(x)";
  

В ванильном JavaScript я использовал оператор с:

 f = "with (Math) {"   f   "}";
  

Код отлично работает на ванильном javascript, но я использую Vue js и сталкиваюсь с проблемами в строгом режиме. Я не знаю, как заменить этот оператор. Кто сталкивался с этой проблемой, пожалуйста, ответьте мне.

Я пытаюсь это:

             let math = Math
            math.f = f
            console.log(f)
  

Но ничего не работает.

Комментарии:

1. Кроме самостоятельного определения всех методов или обнаружения всех используемых вами математических элементов и их замены, вы ничего не можете сделать, поскольку with не поддерживается в строгом режиме.

2. вкратце, мой простой способ — это, например, изменить vue js на jquery?

3. Не уверен, как jQuery можно использовать в качестве замены vue.

4. Дело в том, что в jquery этот код работает, с оператором «with».

5. потому что вы не используете строгий режим с jQuery. Если вы установите строгий режим, это также приведет к сбою.

Ответ №1:

В принципе, with не рекомендуется использовать, поскольку это может вызвать проблемы в программах. Итак, каковы ваши варианты?

определите набор глобальных значений

 const sqrt = Math.sqrt
const log = Math.log

const test1 = new Function("a","return sqrt(a)")
const test2 = new Function("b","return log(b)")

console.log(test1(4))
console.log(test2(100))  

Другой вариант — выполнить замены с помощью reg exp

 const fixMath = eq => eq.replace(/(sqrt|log|pow)/g,'Math.$1')

const test1 = new Function("a", fixMath("return sqrt(a)"))
const test2 = new Function("b", fixMath("return log(b)"))
const test3 = new Function("a", "b", fixMath("return pow(a, b)"))
const test4 = new Function("a", "b", fixMath("return sqrt(pow(a, 2)   pow(b, 2))"))

console.log(test1(4))
console.log(test2(100))
console.log(test3(10, 3))
console.log(test4(3, 3))  

Комментарии:

1. Журнал — это, например. Математическую функцию ввел пользователь.

2. итак …. чем это отличается от жестко закодированной строки? Вам нужно будет установить все свойства Math, которые вы хотите поддерживать,..