2017-04-25 81 views
0

我在IE9中發現了奇怪的行爲。比方說,我們有一個返回上下文功能:IE9投射上下文'這'到對象

function toContext() { return this; } 

在IE9中,如果我有一些原始的上下文調用它,上下文澆鑄到對象

toContext.call(3); // => [object Number] 
toContext.call(""); // => [object String] 

在IE10及更高版本,它返回傳遞原始的,但IE9給這個奇怪的結果,這破壞了我的編碼模式。

我在IE11中模擬IE9,也許這是模擬問題。我搜索了舊的IE的這種行爲,但沒有發現任何有用的東西。有人可以確認這種行爲會影響本地IE9,或者有人知道更多關於此主題的內容嗎?

+0

使用嚴格模式獲取原語,使用sloppy模式將其轉換爲對象。爲了將值賦給對象,不要使用'getContext.call',而只使用'Object'。 – Bergi

回答

1

IE9 does not support strict mode,您似乎正在使用它,但有必要獲取原始值this值。

+0

所有主流瀏覽器的控制檯都不是嚴格模式(你可以不指定變量,可以聲明保留字等等),而且所有的瀏覽器在控制檯中處理原語'this'。此外,我沒有發現上下文和嚴格模式之間的任何關係。剛纔提到的文章,在嚴格模式下,null上下文不會切換到全局。我沒有發現嚴格模式對'this'的任何其他後果。 – Vaclav

+0

您可能會發現[本文檔](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode#Securing_JavaScript)更有用 - 在草率函數中,「this」被轉換爲對象,這意味着成爲'null'和'undefined'的全局對象,併爲其他原始值裝箱。這正是你正在經歷的行爲。 – Bergi

+0

在我測試過的任何瀏覽器或控制檯中,我沒有從'toContext'函數獲取原始返回值,除非您使用嚴格模式定義'toContext'。 – Bergi