JavaScript:意外类型的结果

时间:2013-02-20 03:51:47

标签: javascript this typeof

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

function applyCall(arr, fn) {
  fn.call(arr[0], 0, arr[0]);
}

和一些代码

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
});

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

jsfiddle here

1 个答案:

答案 0 :(得分:8)

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

  

...原始值将被装箱。

“boxed”表示原语包含在Object中。请注意,这仅适用于apply / call的第一个参数。其他参数变为不是“盒装”的函数参数。