似乎当使用基本类型(字符串,数字)作为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]]属性设置为字符串的值.
| 归档时间: |
|
| 查看次数: |
354 次 |
| 最近记录: |