为什么javascript在传递给function.apply()或function.call()时会改变原始类型?

gfx*_*onk 9 javascript

似乎当使用基本类型(字符串,数字)作为this函数调用的主体(作为function.call()或函数apply()的第一个参数)时,基本类型被提升为其对象的等价物(例如一个字符串变成一个字符串).

为了显示:

var f = function(x) { return [typeof(this), typeof(x)]; }  
var obj = '123'  
f.call(obj, obj)  
>>> ["object", "string"]  
Run Code Online (Sandbox Code Playgroud)

也就是说,"this"成为一个对象(它是一个String对象,我已经检查过),而第二个调用参数成为函数"f"的第一个参数,并且仍然是一个原始字符串.

对象都是 "123",但微妙的东西不起作用(例如,它们在"=="方面相同,但在"==="方面则不相同).

我在chrome和firefox中都注意到了这种行为,所以我假设它有一个特定的原因.我搜索过,但没有找到任何解释.我很感激任何解释,希望通过某种方式链接到文档,解释有关此规则及其发生原因的规则.

Jam*_*mes 10

这似乎是正确的行为.

http://bclary.com/2004/11/07/#a-15.3.4.4

Function.prototype.call - 被调用的函数作为此值传递给ToObject(thisArg).

ToObject "根据以下内容将其参数转换为Object类型的值":

String - 创建一个新的String对象,其[[value]]属性设置为字符串的值.