javascript - 如何在 Javascript 中获取此关键字的类型?
问题描述
我正在操作的原型,Object
以便我可以添加一些扩展方法。
我发现如果操作数是,typeof
运算符总是返回:object
this
Object.prototype.logType = function () { console.log(typeof this); }
"Hello".logType()
上面代码的输出是object
而不是string
. 我知道在 JavaScript 中一切确实是object
,但是我需要知道 的值的确切类型this
。我怎样才能做到这一点?
解决方案
当您调用原语上的方法时,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
推荐阅读
- python - 使用 matplotlib.pyplot 在图形上绘制许多点
- r - R:意外的“ifelse”行为
- oracle-sqldeveloper - 如何在 ORACLE SQL Developer 中查找或替换换行符
- asp.net-core - 运行默认 Web 应用程序 .Net Core 3 时出错
- c# - 如何解决此问题,System.Linq.Dynamic.ParseException:“TblEventsManagements”类型中不存在属性或字段 asc?
- node.js - 当包装在另一个函数中时,请求在使用 multer 上传时挂起
- r - 如何在 R 中的 forcenetwork 中设置链接距离?
- firebase - Vue 组件仅在 FirebaseUI 重定向后在控制台悬停、窗口调整大小等时更新
- sql - 截断时间戳
- python - 您如何将 StringProperty 作为字符串对象进行迭代?