Поведение Javascript String Array-Like-Object - PullRequest
0 голосов
/ 07 февраля 2019

Adding new value to string

Когда я запускаю приведенный выше код в консоли разработчика Chrome, я не получаю никакой ошибки.Но когда тот же код запускается через js, загруженный на веб-страницу, я получаю это исключение - Cannot create property 'name' on string 'some string'

Может кто-нибудь сказать мне, почему в вышеупомянутых случаях наблюдается другое поведение?

Ответы [ 3 ]

0 голосов
/ 07 февраля 2019

Ваша веб-страница должна работать с этим фрагментом кода в строгом режиме, при котором присвоение свойствам строки приводит к ошибке:

'use strict';
const str = 'foo';
str.bar = 'bar';

В неаккуратном режиме он просто тихо выйдет из строя:

const str = 'foo';
str.bar = 'bar';
0 голосов
/ 07 февраля 2019

Давайте посмотрим на это дело

const a = "a"
Object.isFrozen(a) // true
const b = new String("b")
Object.isFrozen(b) // false

Из этого раздела мы можем увидеть, что String объекты не обязательно заморожены.Только эти строковые литералы заморожены (я думаю, это потому, что они совместно используются в пуле. Если они не заморожены, вы можете создать свойства в одном месте, чтобы повлиять на код в другом месте). Однако явно созданные объекты String не зависят отбассейн, таким образом, не заморожен.

0 голосов
/ 07 февраля 2019

Строки являются объектами-значениями, так как в них есть значение, а не ссылка на экземпляр объекта, они не могут иметь свойства, установленные с помощью ["name"], как это могут делать ссылочные объекты.

a [3] является 4-м символом в строке, а [0] является первым.

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