Javascript IE9将上下文“this”强制转换为对象

Javascript IE9将上下文“this”强制转换为对象,javascript,internet-explorer,internet-explorer-9,Javascript,Internet Explorer,Internet Explorer 9,我在IE9中发现了奇怪的行为。假设我们有一个返回上下文的函数: function toContext() { return this; } 在IE9中,如果我用一些基本上下文来调用它,则该上下文被强制转换为Object toContext.call(3); // => [object Number] toContext.call(""); // => [object String] 在IE10和更高版本中,它返回传递的原语,但IE9给出了这个奇怪的结果,这破坏了我的编码模式 我

我在IE9中发现了奇怪的行为。假设我们有一个返回上下文的函数:

function toContext() { return this; }
在IE9中,如果我用一些基本上下文来调用它,则该上下文被强制转换为Object

toContext.call(3);  // => [object Number]
toContext.call(""); // => [object String]
在IE10和更高版本中,它返回传递的原语,但IE9给出了这个奇怪的结果,这破坏了我的编码模式


我在IE11中模拟IE9,也许这是模拟的问题。我搜索了老艾的这种行为,但没有发现任何有用的东西。是否有人可以确认此行为会影响本机IE9,或者有人可能更了解此主题?

,您似乎正在使用它,但它是获取基本体此值所必需的。

使用严格模式获取基本体,使用松散模式将其强制转换为对象。若要将值强制转换为对象,请不要使用getContext.call,而只使用object。所有主要浏览器的控制台都不是严格模式。您可以分配变量而无需声明,您可以声明保留字,等等。。。尽管如此,所有浏览器在控制台中都能很好地处理这个原语。此外,我没有发现上下文和严格模式之间的任何关系。您刚才提供的文章提到,在严格模式下,空上下文不会切换到全局。我没有在“this”上发现严格模式的任何其他结果。您可能会发现更有用的结果-在草率函数中,这被强制转换为对象,这意味着成为null和undefined的全局对象,以及其他基本值的装箱。这正是您正在经历的行为。在我测试过的任何浏览器或控制台中,我都不会从您的toContext函数中获取原始返回值,除非您使用严格模式定义了toContext。抱歉,我已在代码中以严格模式声明了toContext,我已经测试了这个函数,而不是在控制台中声明新的函数——我现在测试了这个函数,您是对的——原语是以非严格模式装箱的——这在您到MDN的第二个链接中也提到了。非常感谢。