Кросс-браузер JavaScript: безопасно ли рассматривать строку как массив? - PullRequest
9 голосов
/ 08 апреля 2011

Безопасен ли этот код во всех основных браузерах?

var string = '123'
alert(string[1] == '2') // should alert true

Ответы [ 5 ]

14 голосов
/ 08 апреля 2011

Нет, это не безопасно. Internet Explorer 7 не поддерживает доступ к строкам по индексу.

Для совместимости с IE7 необходимо использовать метод charAt:

var string = '123';
alert(string.charAt(1) == '2');
3 голосов
/ 08 апреля 2011

Все в JavaScript это объект; массивы, функции, строки, все. Кусок кода, который вы создали, совершенно корректен, хотя и немного сбивает с толку - есть гораздо лучшие способы сделать это

var str = '123';
str[1] === '2'; // true, as you've just discovered (if you're not in IE7)
// Better ways:
str.indexOf('2'); // 1
str.charAt(1); // '2'
str.substr(1, 1); // '2'
str.split(''); // ['1', '2', '3']

Лучшие способы сделать так, чтобы кто-нибудь еще читал ваш код (кто-то еще или вы через 6 месяцев), не считал, что str - это массив. Это делает ваш код намного проще для чтения и поддержки

1 голос
/ 08 апреля 2011

Я тестировал в IE7, IE8, Safari, Chrome и FF. Все работало просто отлично!

EDIT только для ударов это работает в Konqueror! Пример Js Fiddle

0 голосов
/ 08 апреля 2011

Это будет работать. Это может быть проблемой, если вы решите использовать определенные функции браузера (I.E xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); работает только в Internet Explorer)

0 голосов
/ 08 апреля 2011

Я действительно не понимаю, почему вы не можете сделать это ... хотя, в качестве альтернативы, вы можете использовать .substring ()

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