javascript - var __decorator = (this && this.__decorate) || 上的第一个操作数是什么?function() {...} 尝试做什么?
问题描述
当 TypeScript 装饰器(类装饰器)被转译为 JavaScript 时,它会产生以下结果:
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
现在,返回var __decorate
时分配给变量的是什么?(this && this.__decorate)
true
另外,如果它被遗弃,它将如何影响整个代码?
解决方案
JS 不一定会从逻辑语句中 返回true
或返回。如果它是真的,将返回 A,如果 A 是假的,则返回 B。同样,如果它是虚假的,则返回 A,否则返回 B。 false
A || B
A && B
两者||
和&&
也是所谓的短路运算符,如果不需要第二个操作数来确定结果,甚至不执行第二个操作数。so(A && A.B)
常用于获取的值,A.B
同时防止 A
未定义,或A = B || C
用于设置A
是否B
已定义,或如果未定义则声明定义C
。
例如,请参阅MDN了解更多详细信息。
(this && this._decorate)
看起来它正在检查是否_decorate
已在this
. 首先它检查是否this
已定义(否则会引发错误)然后检查值。如果this._decorate
已定义,则将跳过函数声明(因为现有this._decorate
函数将像所有函数一样真实)。
唯一保证返回实际布尔值的 JS 运算符是 not 运算符!
。
推荐阅读
- c++ - 从 wxTextCtrl 中获取数值
- mongodb - 无法使用带有服务器 CA 验证的 TLS 连接到 AWS 数据库
- javascript - Vue 组件方法中的错误-with-debounce 永远不会被报告
- swift - ARC 是否对无主引用进行计数?
- docker - Puppeteer 在 docker 容器中失败:“浏览器已断开连接!”
- mongodb - MochaTest 错误 - UnhandledPromiseRejectionWarning: TypeError: done is not a function
- bash - 使用 curl 下载证书,将证书值回显到 openssl
- ios - Hashable == 方法不能快速检测两个对象之间的差异
- python - 为什么 3D numpy 数组按原样打印(它们是如何排序的)?
- python - VBA To Pandas - 将 VBA 逻辑与 Pandas 匹配时遇到问题