JavaScript:意外类型的结果

Pol*_*ant 6 javascript typeof this

我有一个数组迭代器函数:

function applyCall(arr, fn) {
  fn.call(arr[0], 0, arr[0]);
}
Run Code Online (Sandbox Code Playgroud)

和一些代码

var arr1 = ['blah'];
applyCall(arr1, function (i, val) {
  alert(typeof this); // object    WHY??
  alert(typeof val); // string
  alert(typeof(this === val)) // alerts false, expecting true
});
Run Code Online (Sandbox Code Playgroud)

为什么typeof this在内联函数中object而不是string

jsfiddle 在这里

Exp*_*lls 8

在JavaScript中调用方法时,它在内部设置this为调用对象:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/apply

...和原始值将被装箱.

通过"盒装",它们意味着基元包裹在对象中.请注意,这仅适用于apply/ 的第一个参数call.其他参数变为不是"盒装"的函数参数.

  • 秒击败我,但我学到了一些东西! (2认同)