首页 > 解决方案 > 如何在 Javascript 中获取此关键字的类型?

问题描述

我正在操作的原型,Object以便我可以添加一些扩展方法。
我发现如果操作数是,typeof运算符总是返回:objectthis

Object.prototype.logType = function () { console.log(typeof this); }
"Hello".logType() 

上面代码的输出是object而不是string. 我知道在 JavaScript 中一切确实是object,但是我需要知道 的值的确切类型this。我怎样才能做到这一点?

标签: javascriptthisprototype

解决方案


当您调用原语上的方法时,JS 会自动将该原语包装在其关联对象包装器中,因此:

"Hello".logType()  

变成:

new String("Hello").logType() 

因此,this您的 logType 函数内部指的是包装的原始值,给您一个对象。您可以调用.valueOf()以获取包装在对象中的原始值:

Object.prototype.logType = function () { console.log(typeof this.valueOf()); }

"Hello".logType(); // string
(1).logType(); // number
true.logType(); // boolean
1n.logType(); // bigint
Symbol().logType(); // symbol
(() => {}).logType(); // function
({}).logType(); // object

或者,您可以按照评论中的建议使用严格模式,因为它保持this原始原始状态:

Object.prototype.logType = function () { "use strict"; console.log(typeof this); }

"Hello".logType(); // string
(1).logType(); // number
true.logType(); // boolean
1n.logType(); // bigint
Symbol().logType(); // symbol
(() => {}).logType(); // function
({}).logType(); // object


推荐阅读