javascript - 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
?
解决方案
这是因为您的脚本在非严格模式下运行。如果您添加“使用严格”,那么它会像您期望的那样工作:
"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);
推荐阅读
- javascript - VueJs将所有相同的验证器分组为一个
- javascript - React Native 组件没有被另一个组件调用
- javascript - 保存/恢复光标/插入符号返回错误的位置
- prolog - 在 prolog 规则集中查找出现次数最多的事件
- geography - 计时和导向的含义
- kubernetes - 无法安装特定的 kustomize 版本
- javascript - 如何在 TypeScript 中扩展 IterableIterator
- javascript - 数组数组的 ReactJS 实时搜索过滤器
- flutter - GridView 图像拖放颤动
- python - TensorFlow 到 Arduino