2010-11-16 1 views

ответ

7

очевидный способ сделать это:

var h = window.location.hash; 
if (h != '' && h != '#all' && h != '#') 
+0

+1. Хороший и простой – cobbal

+0

Я часто использую локальные переменные. Это облегчает отладку. –

6

вы можете использовать оператор и литерал объекта:

if (!(window.location.hash in {'':0, '#all':0, '#':0})) 

это работает путем тестирования ключей от объекта (0 'только наполнитель).

Также обратите внимание, что это может привести к поломке, если перепутали с object «s прототип

+0

Решение об использовании массивов не будет аккуратнее (нет необходимости наполнителя 0s), но IE не имеет 'indexOf', так что я полагаю, что это лучше –

+0

Вы действительно нуждаетесь в'! '? Разве это не значит '0'? Быстрый [поиск] (http://snippets.dzone.com/posts/show/6557) предложил использовать '1' в простой" или "ситуации, поэтому я предполагаю, что' 0' отрицает это? –

+0

@ Исаак 0 не значителен, 'in' просто проверяет ключи. – cobbal

3

Регулярное выражение? Не так читается, но достаточно кратким:

if (/^(|#|#all)$/.test(window.location.hash)) { 
    // ... 
} 

Это также работает:

if (window.location.hash.match(/^(|#|#all)$/)) { 
    // ... 
} 

... но это менее эффективно, за комментарий Кена.

+0

Чтобы быть точным, второй пример должен использовать 'search' вместо' match', и оба должны проверить, что значение == -1. Метод поиска 'String' сопоставим с методом' test' RegExp, тогда как метод 'match' сопоставим с методом' exec' RegExp. 'match' и' exec' медленнее, но дают больше информации (или 'null' в нет соответствия), тогда как' search' и 'test' просто дают индекс в строке, в которой начинается первое совпадение (или -1 на no совпадение). –

+0

'RegExp.test' возвращает логическое значение, а не индекс.Я согласен с остальными вашими комментариями. Мой второй пример немного неэффективен, но более читабельен, чем альтернатива, которую вы предлагаете, и, как я полагаю, краткость была точкой вопроса. – harto

1

Используйте indexOf для новых браузеров и поставьте версию для старых браузеров, которые вы можете найти here.

// return value of -1 indicates hash wasn't found 
["", "#all", "#"].indexOf(window.location.hash) 
1

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

В браузерах, window является Global объекта, поэтому вырезать его, если у вас нет есть другое имущество под названием "location" в текущем объеме (маловероятно). location.hash достаточно

1

Я думаю, что хорошо проверить длину, так как первый символ всегда является хешем.

var h = location.hash; 
if (h.length > 1 && h != '#top')