2015-03-23 3 views
-2

У меня есть выражения, похожие на: 300 < = x < 400. Во время выполнения я заменяю x на определенное значение, а затем я буду оценивать выражение, чтобы получить истинное или ложное.Оценить сложные математические выражения в JavaScript

Использование функции eval() всегда возвращает true для указанного выше выражения, за какое-то время оно должно быть ложным.

Любая идея, как оценивать такие выражения?

Благодаря

+0

Это потому, что вы не оцениваете диапазоны в javascript. Вам нужно сделать 2 выражения с помощью x. например: 'if (x> = 300 && x <400) // В диапазоне. – musefan

ответ

2

В JavaScript, как почти все основные языки программирования, вы должны относиться к 300 <= x < 400 как два выражения, а не один, как это:

300 <= x && x < 400 

The && средства «и» (вы найдете && в лота языков).

Вам не нужно (и не должны) использовать eval вообще для этого, просто использовать выражения непосредственно:

if (300 <= x && x < 400) { 
    // ... 
} 

Причина 300 <= x < 400 не дает вам результат вы ожидаете, что он работает так:

  1. Оценить 300 <= x и получить результат (true или false)

  2. Замена, которые приводят к где что Подвыражение было и оценивать полученный result < 400

Поскольку результат на шаге 1, представляет собой логическое значение, result < 400 всегда будут true, потому что result будет принуждать к ряду, и true принуждает до 1 и false числится до 0.

+0

Вы также можете просто сделать' return 300 <= x && x <400', если все, что вы делаете, получает значения true/false от оценки – ilia

+0

Не судимый, почему этот ответ получил немедленное повышение, и тот же самый ответ (который был удален) получил нижний предел. По общему признанию, ваш объясняет это лучше, но другой не ошибается. – musefan

+0

@musefan: Действительно, это было не так. Он также ничего не объяснил и имел совершенно ненужную ветвь if/else. Но это не было ошибкой *. Я предлагаю, чтобы downvoter обнаружил, что это «не полезно» по крайней мере по одной из этих причин, возможно, в комбинации. –

Смежные вопросы