2011-01-16 3 views
3

Я видел это на веб-сайте diveintohtml5. Вот как они проверяют, поддерживается ли localstorage в браузере.Javascript сравнивает 2 проверки localStorage

return 'localStorage' in window && window['localStorage'] !== null;

будет ли это то же самое, только делать?

return window.localStorage != undefined

+0

лично я бы сделать 'возвращение !! window.localStorage', который будет преобразовывать значения в' 0, ложно, не определено, «», NaN' к ложным, чтобы сделать лучше проверить – RobertPitt

+1

@Robert я думаю 'return typeof window.localStorage == 'object';' лучший метод. Если свойство localStorage не является объектом, то это означает, что он не реализован в браузере –

+0

+1, это было бы лучше, чем его более строгое. – RobertPitt

ответ

8

return 'localStorage' in window && window['localStorage'] !== null; 

Это возвращает true, если объект window содержит свойство с именем localStorage, а стоимость этого имущества не равна null.


return window.localStorage != undefined 

Это возвращает истину, если window объект содержит propety с именем localStorage и значение этого свойства не undefined или null (я предполагаю, что глобальный имущество undefined имеет значение undefined)

+0

Ваш анализ указывает, что второй тест лучше, так как первый вернет true, если кто-то установит 'window.localStorage = undefined' – Hemlock

+2

@ Šime Одна проблема:' typeof null === 'object'', так что если window.localStorage равно null вы сообщите об этом. – Hemlock

+0

+1 @Hemlock: Это очень интересно. Не знал этого. – Aishwar

5

же результат во всяком случае, так как если window.localStorage является undefined вы оба получите false. И если window.localStorage является нулевым, вы оба получите false, потому что undefined == null.

Тем не менее, я предпочитаю использовать !! только потому, что это самый быстрый способ преобразования в логическое и насколько полезен localStorage, если он является ложным, null, undefined, '', NaN или 0?

return !!window.localStorage; 

Edit Одно предостережение, что они не являются точно такими же, так как если вы установите window.localStorage в undefined первый доложит как true

+0

+1 как я только что написал то же самое в комментариях, прежде чем я заметил ваш ответ :) – RobertPitt

+0

Ооо, я пропустил NaN и некоторые другие подробности. Будет обновляться. – Hemlock

+0

@Hemlock Если свойство localStorage существует, но имеет значение undefined, то первый фрагмент возвращает true, но второй фрагмент возвращает false. –

0

Желаю вам реко mmend следующую функцию:

function getLocalStorage(){ 
    if (typeof localStorage == “object”){ 
     return localStorage; 
    } else if (typeof globalStorage == “object”){ 
     return globalStorage[location.host]; 
    } else { 
     throw new Error(“Local storage not available.”); 
    } 
} 
  1. Первая проверка будет достаточно, чтобы убедиться, что LocalStorage является Availabe
  2. Некоторые браузеры не поддерживают локальное хранилище, но глобальное хранилище. Он имеет тот же набор функций, но имеет некоторые отличия от localStorga
  3. Если ни одно из хранилищ не поддерживается, выполните исключение.

Если вы хотите прочитать о глобальном хранилище, сравните его с локальным хранилищем, ознакомьтесь с «JavaScript для веб-разработчиков», глава 19. Он описывает клиентские локальные хранилища, сравнивая их с файлами cookie.

1

Вы можете использовать Modernizr (1.1 или новее), чтобы обнаружить поддержку локального хранилища HTML5.

if (Modernizr.localstorage) { 
    // window.localStorage is available 
} else { 
    // no support for local storage 
} 
Смежные вопросы