CMAScript描述了一組用于操作數據值的操作符,包括算術操作符(如加號和減號)、位操作符、 關系操作符和相等操作符。
ECMAScript 操作符能夠適用于很多值,例如字符串、數字值、布爾值,甚至對象。在應用于對象時,相應的操作符通常都會調用對象的valueOf()或toString()方法,以便取得可以操作的值。
只能操作一個值的操作符叫做一元操作符
1. 遞增和遞減操作符
遞增和遞減操作符直接借鑒自 C,而且各有兩個版本:前置型和后置型。前置型應該位于要操作的變量之前,而后置型則應該位于要操作的變量之后。
在使用前置遞增操作符給一個數值加 1 時,要把兩個加號(++)放在這個數值變量前面:
var age=29;
++age;
同理,前置遞減為:
var age=29;
--age;
執行前置遞增和遞減操作時,變量的值都是在語句被求值以前改變的。
var age=29;
var anotherAge=--age + 2;
alert(age); // 輸出28
alert(anotherAge); // 輸出30
后置型遞增和遞減操作符的語法不變(仍然分別是++和--),只不過要放在變量的后面而不是前面。 后置遞增和遞減與前置遞增和遞減有一個非常重要的區別,即遞增和遞減操作是在包含它們的語句被求 值之后才執行的。
var age=29;
age++;
把遞增操作符放在變量后面并不會改變語句的結果,因為遞增是這條語句的唯一操作。但是,當語 句中還包含其他操作時,上述區別就會非常明顯了。請看下面的例子:
var num1=2;
var num2=20;
var num3=num1-- + num2; // 等于 22
var num4=num1 + num2; // 等于 21
在應用于不同的值時,遞增和遞減操作符遵循下列規則:
var s1="2";
var s2="z";
var b=false;
var f=1.1;
var o={
valueOf: function() {
return -1;
}
};
s1++; //值變成數值 3
s2++; //值變成 NaN
b++; //值變成數值 1
f--; //值變成 0.10000000000000009(由于浮點舍入錯誤所致)
o--; // 值變成數值-2
位操作符用于在最基本的層次上,即按內存中表示數值的位來操作數值。
對于有符號的整數,32 位中的前 31 位用于表示整數的值。第 32 位用于表示數值的符號:0 表示正 數,1 表示負數。這個表示符號的位叫做符號位,符號位的值決定了其他位數值的格式。其中,正數以 純二進制格式存儲,31 位中的每一位都表示 2 的冪。
1. 按位非(NOT)
按位非操作符由一個波浪線(~)表示,執行按位非的結果就是返回數值的反碼
var num1=25;
var num2=-num1 - 1;
alert(num2); // "-26"
按位非操作的本質:操作數的負值減 1
2. 按位與(AND)
按位與操作符由一個和號字符(&)表示,它有兩個操作符數。從本質上講,按位與操作就是將兩 個數值的每一位對齊,然后根據下表中的規則,對相同位置上的兩個數執行 AND 操作:
第一個數值的位 第二個數值的位 結果
1 1 1
1 0 0
0 1 0
0 0 0
按位與操作只在兩個數值的對應位都是 1 時才返回 1,任何一位是 0,結果都是 0。
var result=25 & 3; 6
alert(result); //1
3. 按位或(OR)
按位或操作符由一個豎線符號(|)表示,同樣也有兩個操作數。按位或操作遵循下面這個真值表。
第一個數值的位 第二個數值的位 結果
1 1 1
1 0 1
0 1 1
0 0 0
按位或操作在有一個位是 1 的情況下就返回 1,而只有在兩個位都是 0 的情況下才返回 0。
var result=25 | 3;
alert(result); //27
4. 按位異或(XOR)
按位異或操作符由一個插入符號(^)表示,也有兩個操作數。以下是按位異或的真值表
第一個數值的位 第二個數值的位 結 果
1 1 0
1 0 1
0 1 1
0 0 0
按位異或與按位或的不同之處在于,這個操作在兩個數值對應位上只有一個 1 時才返回 1,如果對 應的兩位都是 1 或都是 0,則返回 0。
var result=25 ^ 3;
alert(result); //26
5. 左移
左移操作符由兩個小于號(<<)表示,這個操作符會將數值的所有位向左移動指定的位數。
如果將數值 2(二進制碼為 10)向左移動 5 位,結果就是 64(二進制碼為 1000000)
var oldValue=2; // 等于二進制的10
var newValue=oldValue << 5; // 等于二進制的1000000,十進制的64
注意,左移不會影響操作數的符號位
6. 有符號的右移
有符號的右移操作符由兩個大于號(>>)表示,這個操作符會將數值向右移動,但保留符號位(即
正負號標記)。有符號的右移操作與左移操作恰好相反,即如果將64向右移動5位,結果將變回 2:
var oldValue=64; // 等于二進制的1000000
var newValue=oldValue >> 5; // 等于二進制的10 ,即十進制的2
同樣,在移位過程中,原數值中也會出現空位。只不過這次的空位出現在原數值的左側、符號位的 右側。而此時 ECMAScript 會用符號位的值來填充所有空位,以便得到一個完整的值。
7. 無符號右移
無符號右移操作符由 3 個大于號(>>>)表示,這個操作符會將數值的所有 32 位都向右移動。對正 數來說,無符號右移的結果與有符號右移相同。仍以前面有符號右移的代碼為例,如果將 64 無符號右移5位,結果仍然還是 2:
var oldValue=64;// 等于二進制的1000000
var newValue=oldValue >>> 5;// 等于二進制的10 ,即十進制的2
但是對負數來說,情況就不一樣了。首先,無符號右移是以 0 來填充空位,而不是像有符號右移那 樣以符號位的值來填充空位。所以,對正數的無符號右移與有符號右移結果相同,但對負數的結果就不一樣了。其次,無符號右移操作符會把負數的二進制碼當成正數的二進制碼。而且,由于負數以其絕對值的二進制補碼形式表示,因此就會導致無符號右移后的結果非常之大。
位運算符將其操作數當做32位的比特序列(由0和1組成),而不是十進制、十六進制或八進制數值。
我們主要了解的有七種,分別是:&、|、^、~、<<、>>、>>>。
按位與 & 運算符,對兩個 32 位表達式的每一位執行按位與運算。如果a 和 b 都為1 則結果為1,否則結果為0。
示例:
下面演示如何使用& 運算符:
console.log(1 & 3); // 1
1 & 3 的結果為1,1的二進制表示為00000001,3的二進制表示為00000011,根據 & 的規則,相同得1,不同得0,可以得出結果為 00000001,即1。
按位或 | 運算符,只要a 和 b有一個為1,則結果為1,否則結果為0。
示例:
| 運算符和 & 運算符的區別在于,只要有一個操作數為1,結果就為1。同樣是1 | 3 ,結果輸出為3。
console.log(1 | 3); // 3
1的二進制表示為00000001,3的二進制表示為00000011,根據 | 的規則,得到00000011,轉為十進制,結果為3。
按位異或 ^ 運算符,當 a 和 b 不相同時,結果為1,否則結果為0:
示例:
^ 運算符和 | 運算符有點類似,不同在于,如果操作位都為1,則結果為0。
console.log(1 ^ 3); // 2
1的二進制表示為00000001,3的二進制表示為00000011,根據 ^ 的規則,得到00000010,轉為十進制,結果為2。
按位非 ~ 運算符,對位求反,將1變0,將0變1,也就是求二進制的反碼。
示例:
例如 1的二進制表示為00000001,取反得到11111110,轉為十進制,得到-2:
console.log(~1); // -2
console.log(~0); // -1
console.log(~3); // -4
右移 >> 運算符 ,使指定值的二進制所有位都右移規定的次數,對于其移動規則只需記住符號位不變,左邊補上符號位即按二進制形式把所有的數字向右移動對應的位數,低位移出(舍棄),高位的空位補符號位,即正數補零,負數補1。
示例:
例如1的二進制為00000001,所以1>>1的結果為1:
console.log(1 >> 1); // 0
console.log(8 >> 2); // 2
console.log(64 >> 2); // 16
console.log(128 >> 1); // 64
左移 << 運算符,使指定值的二進制所有位都左移規定的次數,對于其移動規則只需記住丟棄最高位,0補最低位即按二進制形式把所有的數字向左移動對應的位數,高位移出(舍棄),低位的空位補零。
示例:
console.log(1 << 1); // 2
console.log(8 << 2); // 32
console.log(64 << 2); // 256
無符號右移 >>>,該操作符會將第一個操作數向右移動指定的位數。向右被移出的位被丟棄,左側用0填充。因為符號位變成了 0,所以結果總是非負的。
示例:
console.log(-5 >>> 1); // 2147483645
console.log(-8 >>> -2); // 8
console.log(-24 >>> 2); // 1073741818
1.分別用七種按位運算符輸出一些自定義的內容,然后有一個更進一步的認識與了解。
2.請說出下列代碼的輸出結果:
用 Vim 時有一個非常重要的一點需要注意,那就是按鍵的功能取決于編輯器當前的“模式”。 -- Himanshu Arora
本文導航
-基本操作 …… 14%
-方向鍵 …… 19%
-瀏覽文檔 …… 31%
-插入文本 …… 37%
-特殊插入 …… 42%
-刪除文本 …… 46%
-簡單替換文本 …… 52%
-復制/粘貼文本 …… 55%
-撤銷/重做操作 …… 61%
-搜索和替換 …… 64%
-書簽 …… 73%
-選擇文本 …… 77%
-改動選中文本 …… 80%
-保存并退出 …… 85%
-下載 Vim 快捷鍵速查表 …… 92%
編譯自: https://www.maketecheasier.com/vim-keyboard-shortcuts-cheatsheet/作者: Himanshu Arora
譯者: martin2011qi
本文是 Vim 用戶指南[1] 系列的其中一篇:
Vim 初學者入門指南[2]
Vim 快捷鍵速查表
5 個針對有經驗用戶的 Vim 技巧[3]
3 個針對高級用戶的 Vim 編輯器實用技巧[4]
Vim 編輯器是一個基于命令行的工具,是傳奇編輯器 vi 的增強版。盡管圖形界面的富文本編輯有很多,但是熟悉 Vim 對于每一位 Linux 的使用者都能有所幫助——無論你是經驗豐富的系統管理員,還是剛上手樹莓派的新手用戶。
這個輕量級的編輯器是個非常強大的工具。在有經驗的使用者手中,它能完成不可思議的任務。除了常規的文本編輯功能以外,它還支持一些進階特性。例如,基于正則表達式的搜索和替換、編碼轉換,以及語法高亮、代碼折疊等的編程特性。
使用 Vim 時有一個非常重要的一點需要注意,那就是按鍵的功能取決于編輯器當前的“模式”。例如,在“普通模式”輸入字母j時,光標會向下移動一行。而當你在“插入模式”下輸入字符,則只是正常的文字錄入。
下面就是速查表,以便于你充分利用 Vim。
快捷鍵 | 功能 |
---|---|
Esc | 從當前模式轉換到“普通模式”。所有的鍵對應到命令。 |
i | “插入模式”用于插入文字。回歸按鍵的本職工作。 |
: | “命令行模式” Vim 希望你輸入類似于保存該文檔命令的地方。 |
快捷鍵 | 功能 |
---|---|
h | 光標向左移動一個字符 |
j 或 Ctrl + J | 光標向下移動一行 |
k 或 Ctrl + P | 光標向上移動一行 |
l | 光標向右移動一個字符 |
0 | (數字 0)移動光標至本行開頭 |
$ | 移動光標至本行末尾 |
^ | 移動光標至本行第一個非空字符處 |
w | 向前移動一個詞 (上一個字母和數字組成的詞之后) |
W | 向前移動一個詞 (以空格分隔的詞) |
5w | 向前移動五個詞 |
b | 向后移動一個詞 (下一個字母和數字組成的詞之前) |
B | 向后移動一個詞 (以空格分隔的詞) |
5b | 向后移動五個詞 |
G | 移動至文件末尾 |
gg | 移動至文件開頭 |
快捷鍵 | 功能 |
---|---|
( | 跳轉到上一句 |
) | 跳轉到下一句 |
{ | 跳轉到上一段 |
} | 跳轉到下一段 |
[[ | 跳轉到上一部分 |
]] | 跳轉到下一部分 |
[] | 跳轉到上一部分的末尾 |
][ | 跳轉到上一部分的開頭 |
快捷鍵 | 功能 |
---|---|
a | 在光標后插入文本 |
A | 在行末插入文本 |
i | 在光標前插入文本 |
o | (小寫字母 o)在光標下方新開一行 |
O | (大寫字母 O)在光標上方新開一行 |
快捷鍵 | 功能 |
---|---|
:r [filename] | 在光標下方插入文件 [filename] 的內容 |
:r ![command] | 執行命令 [command] ,并將輸出插入至光標下方 |
快捷鍵 | 功能 |
---|---|
x | 刪除光標處字符 |
dw | 刪除一個詞 |
d0 | 刪至行首 |
d$ | 刪至行末 |
d) | 刪至句末 |
dgg | 刪至文件開頭 |
dG | 刪至文件末尾 |
dd | 刪除該行 |
3dd | 刪除三行 |
快捷鍵 | 功能 |
---|---|
r{text} | 將光標處的字符替換成 {text} |
R | 進入覆寫模式,輸入的字符將替換原有的字符 |
快捷鍵 | 功能 |
---|---|
yy | 復制當前行至存儲緩沖區 |
["x]yy | 復制當前行至寄存器 x |
p | 在當前行之后粘貼存儲緩沖區中的內容 |
P | 在當前行之前粘貼存儲緩沖區中的內容 |
["x]p | 在當前行之后粘貼寄存器 x 中的內容 |
["x]P | 在當前行之前粘貼寄存器 x 中的內容 |
快捷鍵 | 功能 |
---|---|
u | 撤銷最后的操作 |
Ctrl+r | 重做最后撤銷的操作 |
快捷鍵 | 功能 |
---|---|
/search_text | 檢索文檔,在文檔后面的部分搜索 search_text |
?search_text | 檢索文檔,在文檔前面的部分搜索 search_text |
n | 移動到后一個檢索結果 |
N | 移動到前一個檢索結果 |
:%s/original/replacement | 檢索第一個 “original” 字符串并將其替換成 “replacement” |
:%s/original/replacement/g | 檢索并將所有的 “original” 替換為 “replacement” |
:%s/original/replacement/gc | 檢索出所有的 “original” 字符串,但在替換成 “replacement” 前,先詢問是否替換 |
快捷鍵 | 功能 |
---|---|
m {a-zA-Z} | 在當前光標位置設置書簽,書簽名可用一個大小寫字母({a-zA-Z}) |
:marks | 列出所有書簽 |
{a-zA-Z} | 跳轉到書簽 {a-zA-Z} |
快捷鍵 | 功能 |
---|---|
v | 進入逐字可視模式 |
V | 進入逐行可視模式 |
Esc | 退出可視模式 |
快捷鍵 | 功能 |
---|---|
~ | 切換大小寫 |
d | 刪除一個詞 |
c | 變更 |
y | 復制 |
> | 右移 |
< | 左移 |
! | 通過外部命令進行過濾 |
快捷鍵 | 功能 |
---|---|
:q | 退出 Vim,如果文件已被修改,將退出失敗 |
:w | 保存文件 |
:w new_name | 用 new_name 作為文件名保存文件 |
:wq | 保存文件并退出 Vim |
:q! | 退出 Vim,不保存文件改動 |
ZZ | 退出 Vim,如果文件被改動過,保存改動內容 |
ZQ | 與 :q! 相同,退出 Vim,不保存文件改動 |
僅僅是這樣是否還不足以滿足你?別擔心,我們已經為你整理好了一份下載版的速查表,以備不時之需。
點此下載(英文):http://www.maketecheasier.com/cheatsheet/vim-keyboard-shortcuts-cheatsheet/
via: https://www.maketecheasier.com/vim-keyboard-shortcuts-cheatsheet/
作者:Himanshu Arora[6] 譯者:martin2011qi 校對:wxy
本文由 LCTT[7] 原創編譯,Linux中國 榮譽推出
[1]: https://www.maketecheasier.com/series/vim-user-guide/
[2]: https://linux.cn/article-8143-1.html
[3]: https://www.maketecheasier.com/vim-tips-tricks-for-experienced-users/
[4]: https://www.maketecheasier.com/vim-tips-tricks-advanced-users/
[5]: http://www.maketecheasier.com/cheatsheet/vim-keyboard-shortcuts-cheatsheet/
[6]: https://www.maketecheasier.com/author/himanshu/
[7]: https://github.com/LCTT/TranslateProject
*請認真填寫需求信息,我們會在24小時內與您取得聯系。