var d = {};
d.a = 'myString';
d.b = function(a) {
console.log(this);
}
d.b.call(d.a);Run Code Online (Sandbox Code Playgroud)
在上面的代码中,为什么 'myString'object在登录到控制台时显示为 an ?
甚至typeof显示它是一个object. 并随着每个字母拆分。
我试图做
arr = ['myString','foo','bar']
console.log(arr.includes(this));
Run Code Online (Sandbox Code Playgroud)
这也返回 false 。使用时如何将其作为字符串获取this?
这是因为您的脚本在非严格模式下运行。如果您添加“使用严格”,那么它会像您期望的那样工作:
"use strict";
let d = {
a: 'myString',
b: function(a) {
console.log(this);
}
};
d.b.call(d.a);Run Code Online (Sandbox Code Playgroud)
原因是在 ES6 之前,this 始终是一个对象。任何原语都将转换为对象。如果您不是在严格模式下运行,这仍然是行为。
如果无法将整个脚本置于严格模式,则只需将其应用于函数:
let d = {
a: 'myString',
b: function(a) {
"use strict";
console.log(this);
}
};
d.b.call(d.a);Run Code Online (Sandbox Code Playgroud)