Как можно [это] быть неопределенным в строгом режиме?
Когда я запускаю этот код в 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"
,