整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

web前端之JavaScript操作符上

web前端之JavaScript操作符上



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

在应用于不同的值时,递增和递减操作符遵循下列规则:

  • 在应用于一个包含有效数字字符的字符串时,先将其转换为数字值,再执行加减1的操作。字 符串变量变成数值变量。
  • 在应用于一个不包含有效数字字符的字符串时,将变量的值设置为NaN,字符串变量变成数值变量。
  • 在应用于布尔值 false 时,先将其转换为0再执行加减 1 的操作。布尔值变量变成数值变量。
  • 在应用于布尔值 true 时,先将其转换为 1 再执行加减 1 的操作。布尔值变量变成数值变量。
  • 在应用于浮点数值时,执行加减 1 的操作。
  • 在应用于对象时,先调用对象的 valueOf()方法以取得一个可供操作的 值,然后对该值应用前述规则。如果结果是 NaN,则在调用 toString()方法后再应用前述规则,对象变量变成数值变量。
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光标向左移动一个字符
jCtrl + J光标向下移动一行
kCtrl + 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,不保存文件改动

下载 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