Как можно [это] быть неопределенным в строгом режиме?

Когда я запускаю этот код в Chrome, я получаю Uncaught TypeError: Не удается прочитать свойство 'concat' из неопределенного

function _log()
{
    'use strict'

    [this].concat(Array.from(arguments)).forEach(
        function (obj) { console.log(obj) }
    )
}

_log('foo', 'bar');

Я не понимаю, почему это происходит. Как может [this] быть неопределенным? Даже если this были неопределенными, [this] все еще должен быть массив, не так ли?

Забавная деталь в том, что когда я убираю use strict В строке из функции ошибка исчезает, и код ведет себя как ожидалось, регистрируя контекст функции и аргументы каждый на новой строке.

Есть ли что-то особенное в использовании ключевого слова? this в строгом режиме, о котором я не знаю?

Благодарю.

1 ответ

Решение

Это забавная ошибка:

Вы просто забыли точку с запятой после 'use strict', что полностью меняет способ анализа кода:

'use strict'[this].concat...

Вы берете собственность по имени "[Object window]" в 'use strictЦепочка Конечно это undefinedтак что у него нет свойства "concat",

Другие вопросы по тегам