《JavaScript高级程序设计》阅读笔记(五):ECMAScript中的运算符(一)

简介:

2.9 运算符

2.9.1、一元运算符

  一元运算符只有一个参数,即要操作的对象或值。

  1、delete:删除对以前定义的对象属性或方法的引用,但此运算符不能删除开发者未定义的属性和方法。示例:

 1 var o=new Object;
2 o.name="Nicholas";
3 o.show=function(){
4 return "test";
5 };
6 console.log(o.name); //outpus Nicholas
7 console.log(o.show()); //outpus test
8
9 delete o.name;
10 delete o.show;
11
12 console.log(o.name); //outpus undefined
13 console.log(o.show()); //outpus TypeError: o.show is not a function
14
15 delete o.toString;
16 console.log(o.toString()); //outpus [object Object]

  2、void:对任何值都返回undefined,该运算符通常用于避免输出不应该输出的值。

  如在链接中打开新窗口,代码如下:

<a href="javascript:window.open('about:blank')">Click Me</a>

  点击链接后会在新窗口中出现[object]。这是因为window.open()方法返回了对新打开窗口的引用。然后该对象将被转换成要显示的字符串。要避免这种结果,可以用void运算符调用window.open()函数:

<a href="javascript:void(window.open('about:blank'))">Click Me</a>

  3、前增量/前减量运算符:从C中借用的两个运算符。示例:

1 var iNum=10;
2 console.log(++iNum); //outpus 11 same as iNum=iNum+1
3 console.log(iNum); //outpus 11
4 console.log(--iNum); //outpus 10 same as iNum=iNum-1
5 console.log(iNum); //outpus 10

  4、后增量/后减量运算符:从C中借用的两个运算符。与前增量/前减量一样,也是给数值加1或减1,不同的是后缀式运算符是在计算过包含它们的表达式后才进行增量或减量运算的。示例:

1 var iNum=10;
2 iNum--
3 console.log(iNum); //outpus 9
4 console.log(iNum--); //outpus 9
5 console.log(iNum); //outpus 8
6 iNum++
7 console.log(iNum); //outpus 9
8 console.log(iNum++); //outpus 9
9 console.log(iNum); //outpus 10

  5、一元加法和一元减法:用法与高中数学中学到的用法相同,一元加法对数字无任何影响,一元减法就是对数值求负。但一元回法和一元减法对字符串进行运算时与parseInt()相似,主要的不同是只有对以"ox"开头的字符串,一元运算符才把它转换为10进制的值。示例:

 1 var iNum=25;
2 iNum=+iNum;
3 console.log(iNum); //outpus 25
4
5 var sNum="50";
6 console.log(typeof sNum); //outpus string
7 console.log(+sNum); //outpus 50
8 console.log(typeof +sNum); //outpus number
9
10 var sNum1="017";
11 var sNum2="0xB";
12 console.log(-sNum1); //outpus -17
13 console.log(-sNum2); //outpus -11

2.9.2 位运算符

  1、位运算NOT:由(~)表示,处理过程如下:

  (1) 把运算数转换为32位数字

  (2) 把二进制形式转换成它的二进制反码;

  (3) 把二进制反码转换为浮点数

  示例:

1 var iNum1=25;        //25 is equal to 0000 0000 0000 0000 0000 0000 0001 1001
2 var iNum2=~iNum1; //conver to 1111 1111 1111 1111 1111 1111 1110 0110
3 console.log(iNum2); //outpus -26
4
5 //位运算符NOT实质上是对数字求负,然后减1,因此下面的代码也可以得到同样的效果
6 var iNum3=25;
7 var iNum4=-iNum3-1;
8 console.log(iNum4);

  2、位运算AND:由(&)表示,直接对数字的二进制形式进行计算。规则为全为1才为1,否则为0。示例:

1 var iNum1=25;        //25 is equal to 0000 0000 0000 0000 0000 0000 0001 1001
2 var iNum2=iNum1&3; // 3 is equal to 0000 0000 0000 0000 0000 0000 0000 0011
3 console.log(iNum2); // and is 0000 0000 0000 0000 0000 0000 0000 0001 outpus 1

  3、位运算OR:由(|)表示,直接对数字的二进制形式进行计算。规则为全为0才为0,否则为1。示例:

1 var iNum1=25;        //25 is equal to 0000 0000 0000 0000 0000 0000 0001 1001
2 var iNum2=iNum1|3; // 3 is equal to 0000 0000 0000 0000 0000 0000 0000 0011
3 console.log(iNum2); // or is 0000 0000 0000 0000 0000 0000 0001 1011 outpus 27

  4、位运算XOR:由(^)表示,直接对数字的二进制形式进行计算。规则为只有一个数位存放的是1时才为1,否则为0。示例:

1 var iNum1=25;        //25 is equal to 0000 0000 0000 0000 0000 0000 0001 1001
2 var iNum2=iNum1^3; // 3 is equal to 0000 0000 0000 0000 0000 0000 0000 0011
3 console.log(iNum2); // xor is 0000 0000 0000 0000 0000 0000 0001 1010 outpus 26

  5、左移运算:由(<<)表示,把数字中的所有数位向左移动指定的数量,保留符号位,左移一位相当于乘以2。

  6、有符号右移运算:由(>>)表示,把数字中的所有数位向右移动指定的数量,保留符号位,右移一位相当于除以2。

  7、无符号右移运算:由(>>>)表示,把数字中的所有数位向右移动指定的数量。对于正数跟有符号的右移完全一样,对于负数作为正数来处理。

  示例:

 1 var iOld=2;
2 var iOld1=64;
3 var iOld2=64;
4 var iOld3=-2;
5
6 var iNew=iOld<<5;
7 var iNew1=iOld1>>5;
8 var iNew2=iOld2>>>5;
9 var iNew3=iOld3>>>1;
10
11 console.log(iNew); //outpus 64
12 console.log(iNew1); //outpus 2
13 console.log(iNew2); //outpus 2
14 console.log(iNew3); //outpus 2147483647

  负数iOld3无符号右移的计算方法如下:

  先把-2转换成无符号的等价形式,即-2的二进制补码:

  -2的非负版本二进制表示:0000 0000 0000 0000 0000 0000 0000 0010

  该二进制的反码:1111 1111 1111 1111 1111 1111 1111 1101

  在二进制反码上加1:1111 1111 1111 1111 1111 1111 1111 1110

  最后再右移一位:0111 1111 1111 1111 1111 1111 1111 1111 即为:2147483647

2.9.3 Boolean运算符

  1、逻辑NOT:由(!)表示,返回值一定是Boolean值,行为如下:

  如果运算数是对象,返回false

  如果运算数是数字0,运回true

  如果运算数是0以外的任何数字,反回false

  如果运算数是null,返回true

  如果运算数是NaN,返回true

  如果运算数是undefined,发生错误

  2、逻辑AND:由(&&)表示,如果运算数均为Boolean型,只有当运算数均为true时才返回true,否则返回false。AND运算的运算数可以是任何类型,返回值不一定是Boolean值:

  如果一个运算数是对象,另一个是Boolean值,返回该对象

  如果两个运算数都是对象,返回第二个对象

  如果某个运算数是null,返回null

  如果某个运算数是NaN,返回NaN

  如果某个运算数是undefined,发生错误

  ECMAScript中的逻辑AND也是简便运算,即如果第一个运算数决定了结果,就不再计算第二个运算数,示例:

1 var bFalse=false;
2 var bResult=bFalse&&bUnknow;
3 console.log(bResult); //outpus false
4
5 var bTrue=true;
6 var bResult=bTrue&&bUnknow;
7 console.log(bResult); //outpus ReferenceError: bUnknow is not defined

  3、逻辑OR运算符:由(||)表示,如果运算数均为Boolean型,只有当运算数均为false时才返回false,否则返回true。OR运算的运算数可以是任何类型,返回值不一定是Boolean值:

  如果一个运算数是对象,另一个是Boolean值,返回该对象

  如果两个运算数都是对象,返回第一个对象

  如果某个运算数是null,返回null

  如果某个运算数是NaN,返回NaN

  如果某个运算数是undefined,发生错误

  ECMAScript中的逻辑OR也是简便运算,即如果第一个运算数决定了结果,就不再计算第二个运算数,示例:

1 var bTrue=true;
2 var bResult=bTrue||bUnknow;
3 console.log(bResult); //outpus true
4
5 var bFalse=false;
6 var bResult=bFalse||bUnknow;
7 console.log(bResult); //outpus ReferenceError: bUnknow is not defined

2.9.4 乘性运算符

  1、乘法运算符:由(*)表示,正常情况下跟数学中的乘法相同,特殊情况下有些特殊值:

  如果运算的结果太大或太小,生成结果为Infinity或-Infinity

  如果某个运算数是NaN,结果为NaN

  Infinity乘以0,结果为NaN

  Infinity乘以0以外的任何数字,结果为Infinity或-Infinity,由第二个运算数的符号决定

  Infinity乘以Infinity,结果为Infinity

  2、除法运算符:由(/)表示,正常情况下跟数学中的乘法相同,特殊情况下有些特殊值:

  如果运算的结果太大或太小,生成结果为Infinity或-Infinity

  如果某个运算数是NaN,结果为NaN

  Infinity被Infinity除,结果为NaN

  Infinity被任何数字除,结果为Infinity

  0除以一个非无穷大的数字,结果为NaN

  Infinity被0以外的任何数字除,结果为Infinity或-Infinity,由第二个运算数的符号决定

  3、取模运算符:由(%)表示,正常情况下跟数学中的乘法相同,特殊情况下有些特殊值:

  如果被除数是Infinity,或者除数是0,结果为NaN

  Infinity被Infinity除,结果为NaN

  如果除数是无穷大的数,结果为被除数

  如果被除数为0,结果为0



本文转自Artwl博客园博客,原文链接:http://www.cnblogs.com/artwl/,如需转载请自行联系原作者

相关文章
|
2月前
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
45 0
|
24天前
|
JavaScript 前端开发 安全
ECMAScript 6(以下简称 ES6)的出现为 JavaScript 带来了许多新的特性和改进,其中 let 和 const 是两个非常重要的关键字。
ES6 引入了 `let` 和 `const` 关键字,为 JavaScript 的变量管理带来了革新。`let` 提供了块级作用域和暂存死区特性,避免变量污染,增强代码可读性和安全性;`const` 用于声明不可重新赋值的常量,但允许对象和数组的内部修改。两者在循环、函数内部及复杂项目中广泛应用,有助于实现不可变数据结构,提升代码质量。
23 5
|
23天前
|
自然语言处理 JavaScript 前端开发
ECMAScript 6 的出现为 JavaScript 带来了许多新的特性和改进
这些只是ES6的一些主要特性,它们极大地增强了JavaScript的功能和表现力,使得JavaScript在大型应用开发、前端框架等领域能够更加高效地编写复杂的应用程序。
|
1月前
|
自然语言处理 JavaScript 前端开发
[JS]同事看了我做的this笔记,直摇头,坦言:我还是参考启发博文吧
本文介绍了JavaScript中`this`关键字的重要性和使用规则。作者回顾了早期笔记,总结了`this`指向的各种情况,并分享了最新的理解。文章强调了`this`在不同上下文中的指向,包括对象方法、全局函数、箭头函数等,并提供了改变`this`指向的方法。适合JavaScript开发者参考。
48 2
|
2月前
|
JavaScript 前端开发 编译器
掌握现代化JavaScript:ECMAScript提案与特性
【10月更文挑战第13天】本文介绍了ECMAScript(ES)的最新提案与特性,包括可选链、空值合并运算符、类字段和顶层Await等。通过跟踪TC39提案、使用Babel或TypeScript、测试兼容性以及逐步迁移,开发者可以高效地采用这些新特性,简化代码、提高开发效率并增强应用功能。文章还提供了实战技巧,帮助开发者在现代Web开发中充分利用这些现代化的特性。
|
3月前
|
JavaScript 前端开发 Java
JavaScript笔记(回顾一,基础知识篇)
JavaScript基础知识点回顾,包括语言定义、ECMAScript规范、字面量、变量声明、操作符、关键字、注释、流程控制语句、数据类型、类型转换和引用数据类型等。
JavaScript笔记(回顾一,基础知识篇)
|
2月前
|
JavaScript
js运算符
js运算符
22 5
|
3月前
|
Web App开发 JavaScript 前端开发
探索现代JavaScript开发:ECMAScript提案的未来
JavaScript是最受欢迎的编程语言之一,其发展迅速。ECMAScript(JS的标准化版本)的提案和更新为其带来了诸多新特性和改进。本文将介绍值得关注的ECMAScript提案,如可选链、空值合并运算符、逻辑赋值运算符、类字段和顶级Await,并展示如何利用这些新特性提升开发效率和代码质量。通过关注TC39提案流程、使用Babel和TypeScript等工具,开发者可以提前体验并利用这些新特性。随着JavaScript的不断进步,未来将有更多令人期待的功能加入。
|
2月前
|
JavaScript 前端开发
JavaScript 运算符全知道
JavaScript 运算符全知道
54 0
|
3月前
|
JavaScript 前端开发
JavaScript 运算符
JavaScript 运算符
21 3