2010-11-27 2 views
5

Есть сокращенная версия следующее:Javascript Shorthand

(a > 0 && a < 1000 && b > 0 && b < 1000 && c > 0 && c < 1000) 

Большое спасибо.

+0

Все решения здесь будут медленнее, чем просто сделать эту большую инструкцию if. – epascarello 2010-11-27 13:30:14

ответ

7

Нет, на самом деле нет сокращений. Нет простого встроенного способа указания такого сравнения, чтобы его можно было повторить для разных переменных.

Вы могли бы сделать функцию для проверки значений:

function between(min, max, values) { 
    for (var i = 2; i < arguments.length; i++) { 
    if (arguments[i] < min || arguments[i] > max) return false; 
    } 
    return true; 
} 

и вызвать его с помощью:

between(1, 999, a, b, c) 
-1

вы могли бы использовать один &:

(a > 0 & a < 1000 & b > 0 & b < 1000 & c > 0 & c < 1000) 

ничего другого мне приходит в голову

+2

... Это ужасная идея и в любом случае не очень помогает. – delnan 2010-11-27 12:57:42

+2

& это не то же самое, что и && - хотя оно будет работать одинаково, в большинстве случаев оно побитовое, тогда как && является логическим И. Даже там, где он работает одинаково, у побитового оператора будет больше накладных расходов, так как требуется переключение между логическими и двоичными сравнениями – Macros 2010-11-27 13:00:57

+0

-1 никогда не делайте этого, если вы на самом деле не выполняете побитовые операции. – BGerrissen 2010-11-27 13:08:54

1
Number.prototype.isInRange = function(low, high) { 
    return this > low && this < high; 
} 

Теперь попробуйте это:

(a.isInRange(0,1000) && b.isInRange(0,1000) && c.isInRange(0,1000)) 

Если вы хотите, вы можете переименовать функцию по вашему вкусу, чтобы сохранить еще несколько нажатий клавиш. Я пойду с удобочитаемостью :) :)

+0

Это на самом деле длиннее, всего лишь менее повторяющееся. : o) – deceze 2010-11-27 13:03:20

2

Существует много способов сделать это. Лично если бы я делал это много, я бы определить функцию один раз:

function between(val, min, max) { return min < val && val < max; } 

Тогда ваши if чеки выглядеть следующим образом:

if(between(a, 0, 1000) && between(b, 0, 1000) && between(c, 0, 1000)) 

Альтернативой является добавить метод на сами цифры:

Затем используйте его как t его:

if(a.between(0, 1000) && b.between(0, 1000) && c.between(0, 1000)) 

Хотя это намного чище ... или вы можете пойти другим путем в целом.


Примечание: обоих этих подходов для вы. Они будут работать медленнее, их немного легче поддерживать ... однако, компилятор закрытия включил большинство из них с расширенными оптимизациями.

0

Если вы беспокоитесь о количестве сравнений, нет ярлыка. Если вы хотите уменьшить количество символов в сравнении, вы можете написать функцию «от нуля до 2000» и вызвать ее три раза.

1

Если нет никаких шансов, что a,b,c будет отрицательным числом, то вы можете сделать это:

(a && b && c && a < 1000 && b < 1000 && c < 1000) 

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

(a > 0 && a < 1000 && 
b > 0 && b < 1000 && 
c > 0 && c < 1000) 

Не короче, но гораздо легче читать.

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