调用/应用严格函数与非严格函数时,不同类型的'this'

时间:2018-05-27 18:36:37

标签: javascript node.js

当我在某些非严格函数func.call(12)上使用func时,它会使用this = new Number(12)代替this = 12(请参阅下面的代码段)。我注意到因为typeof this等于'object'而不是'number'

这是预期的行为吗?有什么方法吗?

function a() {
  return this;
}

function b() {
  'use strict';
  return this;
}

const x = a.call(12);
console.log(typeof x);
console.log(x);
console.log(x + 3);

const y = b.call(12);
console.log(typeof y);
console.log(y);
console.log(y + 3);

1 个答案:

答案 0 :(得分:2)

  

这是预期的行为吗?

是的,这是预期的行为。在草率模式下,this始终是一个对象 - 将基元转换为各自的包装器对象。更糟糕的是,nullundefined被全局对象替换。

  

周围有什么办法吗?

只需使用严格模式。