我对javascript中的调用和应用程序有一些疑问

I have some doubts for the call and apply in javascript

本文关键字:应用程序 javascript 调用 我对      更新时间:2023-09-26

function a() {
    console.log(this === 1); //why it is false?
}
a.call(1);

当调用或应用该函数时,该值将被更改。orz!!

使用基元值(如字符串、布尔值)更改callbindapply的上下文时,生成的上下文将是基元的装箱版本。

如果您将this的值记录到控制台,您会看到它不是显示为1,而是显示为类似Number {[[PrimitiveValue]]: 1}的内容。

这个装箱版本是一个对象,所以===将使用引用相等来进行比较——通常情况下,数字将按值进行比较,而不是按引用进行比较。

通过将装箱的版本传递给数字构造函数,可以创建一个安全的数字进行比较。

console.log(Number(this) === 1);

由于基元值被"装箱"(请参阅:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply)这一切都有道理。

您正在使用严格比较(===),并尝试将对象与数字进行比较。尽管您显式地"1"调用函数发送一个对象,所以第四行的"1"是一个对象。如果您尝试使用非严格比较(==),它将计算为true,因为"this"的值将被强制为数字。