[this] 如何在严格模式下未定义?
How can [this] be undefined in strict mode?
当我在 Chrome 中 运行 这段代码时,我得到一个 Uncaught TypeError: Cannot read 属性 'concat' of undefined
function _log()
{
'use strict'
[this].concat(Array.from(arguments)).forEach(
function (obj) { console.log(obj) }
)
}
_log('foo', 'bar');
我不明白为什么会这样。 [this]
怎么会是未定义的呢?即使 this
未定义,[this]
仍然应该是一个数组,不是吗?
一个有趣的细节是,当我从函数中删除 use strict
行时,错误消失并且代码按预期运行,将函数上下文和参数分别记录在新行中。
在严格模式下使用关键字 this
是否有我不知道的特殊之处?
谢谢。
这是一个有趣的错误:
您只是忘记了 'use strict'
之后的分号,这完全改变了代码的解析方式:
'use strict'[this].concat...
您正在使用“use strict
”链中名为 "[Object window]"
的 属性。当然是 undefined
,所以它没有任何 属性 称为 "concat"
。
当我在 Chrome 中 运行 这段代码时,我得到一个 Uncaught TypeError: Cannot read 属性 'concat' of undefined
function _log()
{
'use strict'
[this].concat(Array.from(arguments)).forEach(
function (obj) { console.log(obj) }
)
}
_log('foo', 'bar');
我不明白为什么会这样。 [this]
怎么会是未定义的呢?即使 this
未定义,[this]
仍然应该是一个数组,不是吗?
一个有趣的细节是,当我从函数中删除 use strict
行时,错误消失并且代码按预期运行,将函数上下文和参数分别记录在新行中。
在严格模式下使用关键字 this
是否有我不知道的特殊之处?
谢谢。
这是一个有趣的错误:
您只是忘记了 'use strict'
之后的分号,这完全改变了代码的解析方式:
'use strict'[this].concat...
您正在使用“use strict
”链中名为 "[Object window]"
的 属性。当然是 undefined
,所以它没有任何 属性 称为 "concat"
。