首页 > 解决方案 > JavaScript 字符串在使用 call 和 this 时显示为对象

问题描述

var d = {};
d.a = 'myString';
d.b = function(a) {
    console.log(this);
}

d.b.call(d.a);

在上面的代码中,为什么“myString”object在登录到控制台时显示为?

甚至typeof显示它是一个object. 并且每个字母都分开。

我试图做

arr = ['myString','foo','bar']
console.log(arr.includes(this));

这也返回 false 。使用时如何将其作为字符串获取this

在此处输入图像描述

标签: javascript

解决方案


这是因为您的脚本在非严格模式下运行。如果您添加“使用严格”,那么它会像您期望的那样工作:

"use strict";

let d = {
    a: 'myString',
    b: function(a) {
        console.log(this);
    }
};

d.b.call(d.a);

原因是在 ES6 之前,this 始终是一个对象。任何原语都将转换为对象。如果您没有在严格模式下运行,这仍然是行为。

如果无法将整个脚本置于严格模式,则只需将其应用于函数:

let d = {
    a: 'myString',
    b: function(a) {
        "use strict";
        console.log(this);
    }
};

d.b.call(d.a);


推荐阅读