gyc*_*gyc 3 typescript angular
阅读一篇有关 Angular 变更检测机制的文章时,我遇到了以下打字稿代码:
detach(): void { this._view.state &= ~ViewState.ChecksEnabled; }
Run Code Online (Sandbox Code Playgroud)
我一直在努力理解那行代码。
我知道这个~技巧以及它如何与 一起使用indexOf()。我发现很难用位来理解,但记住它可以被替换为-(x+1)-1 假值,这样就更容易了。
它似乎ViewState.ChecksEnabled是一个布尔值,所以~ViewState.ChecksEnabled给出 -(0 + 1) 或 -(1 + 1)
然后通过&=按位赋值(?)我们得到
this._view.state = this._view.state & -1; // or -2
Run Code Online (Sandbox Code Playgroud)
这里有什么技巧呢?
小智 5
我认为你应该将其视为二进制微积分。
\n\n假设_view.state等于 1,并且ViewState.ChecksEnabled等于 1。
我们有两个按位运算符:
\n\n&将对等于 1 的相应位执行 AND 运算~将反转位因此,通过“重写”操作,我们有:
\n\nvar = 1 & ~ 1\nRun Code Online (Sandbox Code Playgroud)\n\n我们应用波形符:
\n\nvar = 1 & 0\nRun Code Online (Sandbox Code Playgroud)\n\n然后是“与”:
\n\nvar = 0\nRun Code Online (Sandbox Code Playgroud)\n\n这将给出一个简单的零。如果你应用这个_view.state等于 0,则会给出:
var = 0 & ~1 = 0 & 0 = 0\nRun Code Online (Sandbox Code Playgroud)\n\n当您使用 0, 0 时:
\n\nvar = 0 & ~0 = 0 & 1 = 0\nRun Code Online (Sandbox Code Playgroud)\n\n和 1, 0 :
\n\nvar = 1 & ~0 = 1 & 1 = 1\nRun Code Online (Sandbox Code Playgroud)\n\n总结一下:
\n\n0, 0 \xe2\x86\x92 0\n0, 1 \xe2\x86\x92 0\n1, 0 \xe2\x86\x92 1\n1, 1 \xe2\x86\x92 0\nRun Code Online (Sandbox Code Playgroud)\n\n您还可以创建一个沙箱来测试多个数字:
\n\nvar = 1 & ~ 1\nRun Code Online (Sandbox Code Playgroud)\r\n| 归档时间: |
|
| 查看次数: |
3118 次 |
| 最近记录: |