分享

计算机科学研究者陶贤斌站在巨人的肩膀上总结JavaScript运算符

 大文豪贤斌学长 2020-05-02

10.1 算术运算符

“+” 功能 对数字进行代数求和;

对字符串进行连接操作;

“-” 功能 对数字进行减法操作;

对操作数进行“取反”操作;

“*” 功能 对数字进行乘法操作;

符号问题 同号得正,异号得负;

“/” 功能 对数字进行除法操作;

符号问题 同号得正,异号得负;

“%” 功能 返回两个除数的余数;

符号问题 和第一个运算数的符号相同;

10.2 自增与自减

功能相反

++ 对唯一的运算数进行递增操作(每次加1);

-- 对唯一的运算数进行递减操作(每次减1);

规则相同

运算数必须是一个变量、数组的一个元素或者对象的属性;

如果运算数是非数值的则运算符会将它转成数值;

符号位置决定运算结果

运算数

之前:先进行递增(递减)操作,再进行求值;

运算数之后:先进行求值,再进行递增(递减)操作;

10.3 关系运算符

大小关系检测

运算符

< 如果A小于B,则返回值为ture,否则返回值为false;

<= 如果A小于等于B,则返回值为ture,否则返回值为false;

> 如果A大于B,则返回值为ture,否则返回值为false;

>= 如果A大于等于B,则返回值为ture,否则返回值为false;

操作规则

数值与数值的比较:比较它们的代数值;

仅一个运算数是数值:将另一个运算数转换成数值,并比较它们的代数值;

字符串间的比较:逐字符比较它们的Unicode数值;

运算数非数字也非字符串:转换为数值或字符串后进行比较;

运算数无法被转换成数值或字符串:返回值为false;

与NaN的比较:返回值为false;

等值关系检测

相等比较

操作符 “==” 比较两个运算数的返回值看是否相等;

“!=” 比较两个运算数的返回值看是否相等;

类型转换 布尔值:true为1,false为0;

对象:调用valueOf(),返回原始值;

字符串与数值的比较,字符串转换为数值;

比较原则 null与undefined:相等,比较前不进行任何转换;

NaN:与任何数值都不相等,包括其自身;

对象:是否属于同一对象,如是则相等,如为否则不相等;

相同原则

运算符

=== 比较两个运算数的返回值及数据类型看是否相同;

!== 比较两个运算数的返回值及数据类型看是否不同;

比较原则

值类型间比较:只有数据类型相同,且数值相等时才能够相同;

值类型与引用类型比较:肯定不相同;

引用类型间比较:比较它们的引用值(内存地址);

10.4 对象运算符

in

判断左侧运算数是否为右侧运算数的成员;

instanceof

判断对象实例是否属于某个类或构造函数;

new

根据构造函数创建一个新的对象,并初始化该对象;

delete

删除指定对象的属性,数组元素或变量;

.及[]

存取对象和数组元素;

()

函数调用,改变运算运算符优先级等;

10.5 逻辑运算符

!逻辑非

返回值:true, false;

特性:如果运算数的值为false则返回true,否则返回false;

连续使用两次!,可将任意类型转为布尔型值;

&&逻辑与

规则:

第一个操作数是对象,返回第二个操作数;

第二个操作数是对象,第一个操作数值为true时返回该对象;

两个操作数都是对象,返回第二个操作数;

一个操作数是null,返回null;

一个操作数是NaN,返回NaN;

一个操作数是undefined,返回undefined;

特性:

当且仅当两个运算数的值都是true时,才返回true,否则返回false;

短路操作,当第一个操作数的值是false则不再对第二个操作数进行求值;

||逻辑或

规则:

第一个操作数是对象,则返回第一个操作数;

第一个操作数值是false,则返回第二个操作数;

两个操作数都是对象,返回第一个操作数;

两个操作数是null,返回null;

两个操作数是NaN,返回NaN;

两个操作数都是undefined,返回undefined;

特性:

当且仅当两个运算数的值都是false时,才返回false,否则返回true;

如果第一个操作数值为true,则不会对第二个操作数进行求值;

10.6 位运算符

基础知识

类型:

有符号,无符号;

数值范围:-2147483648~2147483647;

存储方式:

正数,

纯2进制存储;

31位中每一位表示2幂;

用0补充无用位;

负数,

2进制补码存储;

当做0来处理的特殊值,

NaN;

Infinity;

逻辑位运算

返回值为1的情况:

0按位非~;

对应位全为1按位与&;

任何一位是1按位或|;

既不同时为0,也不同时为1,按位异或^;

返回值为0的情况:

1按位非~;

对应位全为0按位与&;

任何一位是0按位或|;

既同时全为0,或同时全为1,按位异或^;

位移操作

左移<<:

将数值的所有位左移指定的位数;

所有空位用0补充;

左移1位对其乘2,左移2位对其乘4,以此类推;

有符号右移<<:

将数值的所有位右移指定的位数;

移出的位被舍弃;

保留符号位;

右移1位对其除2,右移2位对其除4,以此类推;

无符号右移<<:

正数,与有符号右移结果相同;

负数,会出现无限大的数值;

复合赋值运算符

位操作符与等号结合,复合赋值不会有性能方面的提升;

10.7 其它运算符

?:

条件运算符,简洁的if else;

typeof

类型判定运算符;

逗号,在一行语句中执行多个不同的操作;

void

舍弃运算数的值,返回undefined作为表达式的值;

10.8 示例代码

<html>

<body>

<script type="text/javascript">

x=5+5;

document.write(x);

document.write("<br />");

x="5"+"5";

document.write(x);

document.write("<br />");

x=5+"5";

document.write(x);

document.write("<br />");

x="5"+5;

document.write(x);

document.write("<br />");

</script>

<h3>规则是:</h3>

<p><strong>如果把数字与字符串相加,结果将成为字符串。</strong></p>

</body>

</html>

查看结果:

10

55

55

55

规则是:

如果把数字与字符串相加,结果将成为字符串。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多