Переменная, определенная с помощью «.»во имя - PullRequest
0 голосов
/ 08 июня 2018

Сегодня я заметил что-то странное при использовании веб-пакета, и DefinePlugin.

Допустим, мой webpack.config.js содержит следующее:

new webpack.DefinePlugin({
    'foo.bar': JSON.stringify('hello world'),
    'baz': JSON.stringify({bar: 'I am in baz.bar'}),
})

И мой global-environment.ts:

declare var foo: object
declare var baz: object

Теперь я делаю это на своем основном файле сценария:

console.log(foo.bar)     // hello world
console.log(foo['bar'])  // hello world
console.log(baz.bar)     // I am in baz.bar
console.log(baz['bar'])  // I am in baz.bar

И все работает хорошо, но теперь начинается самое интересное:

console.log(foo)  // ReferenceError: foo is not defined
console.log(baz)  // { bar: 15 }

Почему этодумаю, что foo не определено, но я действительно могу получить доступ к bar через . и []?

Мое первоначальное подозрение было, что это было нечто похожее на то, когда один использует объект в качестве ключа для другогообъект и он приводит к строке:

const a = {}
const b = {}
const b[a] = 15  // {'[object Object]': 15}

Так что foo.bar будет эквивалентно чему-то вроде globals['foo.bar'], и тогда будет иметь смысл, что один foo будет неопределенным и foo[bar] тоже.За исключением случаев, когда вы упоминаете выше, вы можете использовать foo.bar и foo['bar'] как обычно, как если бы foo был обычным объектом.

Что здесь происходит?

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