当我在某些非严格函数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);
答案 0 :(得分:2)
这是预期的行为吗?
是的,这是预期的行为。在草率模式下,this
始终是一个对象 - 将基元转换为各自的包装器对象。更糟糕的是,null
和undefined
被全局对象替换。
周围有什么办法吗?
只需使用严格模式。