JavaScript: есть ли у примитивных строк методы? - PullRequest
10 голосов
/ 22 апреля 2011

MDN состояния:

примитив, примитивное значение

Данные, которые не являются объектом и не имеют никаких методов.У JavaScript есть 5 примитивных типов данных: строка, число, логическое значение, ноль, неопределенный.За исключением значений null и undefined, все значения примитивов имеют объектные эквиваленты, которые оборачиваются вокруг значений примитивов, например, объект String оборачивает строковый примитив.Все примитивы неизменны.

Так что, когда мы называем "s".replace или "s".anything, это эквивалентно new String("s").replace и new String("s").anything?

Ответы [ 2 ]

15 голосов
/ 22 апреля 2011

Нет, строковые примитивы не имеют методов. Как и в случае с числовыми примитивами, среда выполнения JavaScript будет преобразовывать их в полноценные объекты «String», когда для этого используются такие конструкции, как:

var space = "hello there".indexOf(" ");

В некоторых языках (ну, в частности, в Java, но я думаю, что этот термин является общеупотребительным) говорят, что язык «упаковывает» примитивы в свои обертки объектов, когда это уместно. С числами это немного сложнее из-за капризов грамматики токенов; ты не можешь просто сказать

var foo = 27.toLocaleString();

потому что "." не будет интерпретироваться так, как вам нужно; однако:

var foo = (27).toLocaleString();

отлично работает. Со строковыми примитивами & mdash; и логические, в этом отношении & mdash; грамматика не является двусмысленной, например:

var foo = true.toString();

будет работать.

4 голосов
/ 22 апреля 2011

Технически правильный ответ - «нет».

Реальный ответ - «нет, но все равно будет работать». Это потому, что когда вы делаете что-то вроде

"s".replace()

интерпретатор знает, что вы действительно хотите работать со строкой, как если бы вы создали ее с помощью

var str = new String("s")

и, следовательно, действует так, как будто вы это сделали.

...