JavaScript高级程序设计(3)基本概念 中

操作符

ECMA-262描述了一组用于操作数据值的操作符,包括算数操作符、位操作符、关系操作符和相等操作符。他们能够适应很多值,例如字符串、数字值、布尔值甚至对象。在应用对象时,相应的操作符都会调用对象的valueof()和toString()方法。取得可以操作的值。

一元操作符:只能操作一个值。

1.递增和递减操作符。

前置性(++i):++位于要操作的变量之前 变量先加1,然后赋值给左边的变量。

后值性(i++):++位于要操作的变量之后 ,先赋给左边的变量,然后再+1。

递减同理;

var  num1 = 2;
var  num2 = 20;
var  num3 = --num1 + num2;           //等于21
var  num4 =  num1 + num2;            //等于21

var num5  = num1-- +num2;            //等于22
var num6  = num1 + num2;             //等于21

他们不仅适用于整数,还可以用于字符串、布尔值、浮点数值和对象。应用不同的值有不同的规则。

  1. 一个包含有效数字字符的字符串时,先将其转换为数字值,再执行加减 1 的操作。字符串变量变成数值变量。
  2. 一个不包含有效数字字符的字符串时,将变量的值设置为NaN。字符串变量变成数值变量。
  3. 布尔值为false,先将其转换为 0 再执行加减 1 的操作。布尔值变量变成数值变量。
  4. 布尔值true,先将其转换为 1 再执行加减 1 的操作。布尔值变成数值变量。
  5. 浮点数值时,执行加减 1 的操作。
  6. 对象时,先调用对象的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

2.一元加和减操作符

以一个加号(+)表示,放在数值前面,对数值不会产生任何影响。非数值前面,会对这个值进行转换。

以一个减号(-)表示,放在数值前面,变成负数。非数值前面,对这个值进行转换,变成负数。

位操作符

按位非(NOT) 波浪线(~)表示,结果是返回数值的反码。

按位于(AND) 和号字符(&)表示,只在两个数值的对应位都是 1 时才返回 1 ,任何一位是 0 ,结果都是 0 。

按位或(OR)   竖线符号(|)表示,有一个位是 1 的情况下就返回 1 ,而只有在两个位都是 0 的情况下才返回 0 。

按位异或(XOR) 插入符号(^)表示,两个数值对应位上只有一个 1 时才返回 1 ,如果对应的两位都是 1 或都是 0 ,则返回 0 。

左移  两个小于号(>>)表示,会将数值的所有位向左移动指定的位数。不会影响操作数的符号位

有符号右移  两个大于号(<<)表示,会将数值向右移动,会用符号位填充所有空位。

无符号右移  三个大于号(<<<)表示,二进制数向右移位,直接右移,对于正数,结果和>>相同,对于负数,会把负数的二进制补码当成正数的二进制码处理

布尔操作符

逻辑非(NOT):叹号(!)表示,将它的操作数转换为一个布尔值,然后再对其求反。

同时使用两个逻辑非操作符,可以将值转换为真正的布尔值。

逻辑与(AND):两个和号(&&)表示。

当两个操作数相应的Boolean值均为true时,返回true;有一个false,都会返回false。

短路操作:如果第一个操作数能够决定结果,那么就不会再对第二个操作数求值。

逻辑或(AND):两个竖线符号(||)表示。

当两个操作数相应的Boolean值均为false时,返回false;有一个true,都会返回true。

短路操作:第一个操作结果为true,就不会对第二个操作数求值了。

计算操作符

乘法操作符由一个星号(*)表示,计算两个数值的乘积。

除法操作符由一个斜线符号(/)表示,执行第二个操作数除第一个操作数的计算。

求模(余数)操作符由一个百分号(%)表示。执行常规的除法计算,返回除得的余数

加性操作符(+)

如果是数值,执行常规的加法计算。

如果有字符串,则会拼接起来。添加圆括号(),就可以对数值执行算术计算,然后再将结果与字符串拼接起来。

减法操作符(-)

如果是数值,执行常规的减法计算,

如果是其他,则会转换,在进行计算

1、除了加(+)之外,如果操作数不是Number类型,会自动调用Number()转换为Number类型再进行计算。

2、对于加减(+-),除了作为算术运算符。还可以作为一元操作符(见上)。当然,由于字符串操作中对加号(+)的重载,还可以用于将任意数值(的字符串)相连,这也是第1点中为什么要除了加(+),它在含有非Number类型值时,会将所有操作数转换为字符串相连接。

3、与一般类C语言不同,在ES中,除(/)和取模(%)并不会区分整数和浮点数,比如 5 / 2 = 2.5 而不是2,5.3 % 3 = 2.3 而不是2。

4、任意运算,只要操作数含NaN,结果就是NaN。但并不是结果为NaN就一定有一个操作数为NaN,比如0/0也返回NaN。

5、对于含无穷Infinity的运算,规定比较多,这里就不列举了,可以参考原书,或者自行测试。

关系操作符

小于(<)、大于(>)、小于等于(<=)和大于等于(>=)对两个值进行比较,都会返回一个布尔值。

1.如果两个操作数都是数值,则执行数值比较。

2.如果两个操作数都是字符串,则比较相对应的字符编码值。

3、操作符是对象时,调用valueOf()(如果没有,就调用toString()),再将结果按上面规则比较。

4、任意数和NaN比较返回false。

相等操作符

等于号(==) 不等于(!=) 先转换操作数,然后再比较它们的相等性。

全等(===)  不全等(!==)不会转换操作数,直接比较。

a===b则一定有a==b,而a!=b则一定有a!==b。

条件操作符

variable = boolean_expression ? true_value : false_value;

该表达式主要是根据 boolean_expression 的计算结果有条件地为变量赋值。如果 Boolean_expression 为 true,就把 true_value 赋给变量;如果它是 false,就把 false_value 赋给变量。

赋值操作符(=)  右则的值赋给左侧的变量。

每种主要的算术运算以及其他几个运算都有复合赋值运算符:

  • 乘法/赋值(*=)
  • 除法/赋值(/=)
  • 取模/赋值(%=)
  • 加法/赋值(+=)
  • 减法/赋值(-=)
  • 左移/赋值(<<=)
  • 有符号右移/赋值(>>=)
  • 无符号右移/赋值(>>>=)

逗号操作符

使用逗号操作符可以在一条语句中执行多个操作。

var iNum1 = 1, iNum = 2, iNum3 = 3;

多用于声明多个变量。

时间: 2024-08-16 03:27:25

JavaScript高级程序设计(3)基本概念 中的相关文章

JavaScript 高级程序设计 01-基本概念

一.JavaScript组成 1.一个完成JavaScript是由ECMAScript.DOM.BOM三部分组成的. ECMAScript:提供核心语言功能--语法.类型.语句.关键字.保留字.操作符.对象: DOM:文档对象模型--提供访问和操作网页内容的方法和接口: BOM:浏览器对象模型--提供与浏览器交互的方法和接口 二.在页面中引用js 1.在网页中引用js有两种方法--嵌入和外部 <!DOCTYPE html> <html> <head> <title

[笔记]《JavaScript高级程序设计》- 在HTML中使用JavaScript

一.<script>元素 像HTML页面中插入JavaScript的主要方法,就是使用<script>元素.HTML4.0.1为<script>定义了下列6个属性. async:可选.表示应该立即下载脚本,但不应妨碍页面中的其他操作,比如下载其他资源或等待加载其他脚本.只对外部脚本有效. charset:可选.表示通过src属性指定的代码的字符集. defer:可选.表示脚本可以延迟到文档完全被解析和显示之后再执行.只对外部脚本有效. src:可选.表示包含要执行代码的

JavaScript高级程序设计-(2)基础概念

for-in 语句 for-in 语句是一种迭代语句,用来枚举对象属性,语法:for (property in expression) statement实例:for(var propName in window){ document.write(propName);} 理解参数 EcmaScript函数参数不介意传递进来多少个参数,定义的函数接收2个参数,但是调用时未必传递2个参数,可多可少在函数体内,通过arguments对象访问这个参数数组,如下所述: 没有重载 ECMAScript函数不

javascript高级程序设计——笔记

javascript高级程序设计--笔记 基本概念 基本数据类型包括Undefined/Null/Boolean/Number和String 无须指定函数的返回值,实际上,未指定返回值的函数返回的是一个特殊的undefined值 变量.作用域和内存问题 基本类型值在内存中占据固定大小的空间,因此保存在栈内存中 引用类型的值是对象,保存在堆内存中 确定一个值是哪种基本类型用typeof,确定一个值是哪种引用用instanceof 所有变量都存在于一个执行环境当中,这个执行环境决定了变量的生命周期,

Javascript高级程序设计——第三章:基本概念

javascript高级程序设计——第三章:基本概念 一.语法 EMCA-262通过叫做ECMAScript的“伪语言”为我们描述了javascript实现的基本概念 javascript借鉴了C的语法,区分大小写,标示符以字母.下划线.或美元符号($)开头,注释可以用 // 或者/* */ 严格模式: ECMAScript 5引入了严格模式,在严格模式下不确定的行为将得到处理,通过在顶部添加 “use strict”来启用严格模式: function fuc(){ "use strict&qu

JavaScript高级程序设计学习笔记--基本概念

1.语句 ECMAScript中的语句以一个分号结尾:如果省略分号,则由解析器确定语句的结尾,如下例所示: var sum=a+b //即使没有分号也是有效的语句--推荐 var diff=a-b; //有效的语句--推荐 虽然语句结尾的分号不是必需的,但我们建议任何时候都不要省略它.两个原因:1.加上分号可以避免很多错误 2.加上分号也会在某些情况下增进代码的性能,因为这样解析器就不必再花时间 推测应该在哪里插入分号了. 2.变量 var message="hi"; 像这样初始化变量

《JavaScript高级程序设计》学习笔记 基本概念

系统学习JS, 从<JavaScript高级程序设计>入门,通过学习jQuery或者angularJS源码来进阶. 第1章 JavaScript简介 1.JS问世的目的是处理以前由服务器端语言(如Perl)负责的一些输入验证操作,由Netscape主导开发,那时候微软的IE还不能独领风骚.最初叫做LiveScript,当时媒体热炒Java,于是改名为JavaScript.JavaScript和ECMAScript通常指同一门语言,但是,JavaScript是ECMA-262标准的实现和扩展.E

《Javascript高级程序设计》阅读记录(二):第四章

这个系列之前文字地址:http://www.cnblogs.com/qixinbo/p/6984374.html 这个系列,我会把阅读<Javascript高级程序设计>之后,感觉讲的比较深入,而且实际使用价值较大的内容记录下来,并且注释上我的一些想法.做这个一方面是提升了我的阅读效果以及方便我以后阅读 另一个目的是,Javascript高级程序设计这本书内容很多也很厚,希望其他没有时间的人可以通过看这系列摘录,就可以大体学到书里面的核心内容. 绿色背景的内容是我认为比较值得注意的原著内容.

javascript高级程序设计 第十三章--事件

javascript高级程序设计 第十三章--事件js与HTML的交互就是通过事件实现的,事件就是文档或浏览器窗口中发生的一些特定的交互瞬间. 事件流:事件流描述的是从页面中接收事件的顺序,IE的是事件冒泡流,Netscape的是事件捕获流,这个两个是完全相反的事件流概念. 事件冒泡:由最具体的元素接收,然后逐级向上传播到更高级的节点,即事件沿DOM树向上传播,直到document对象. 事件捕获:不大具体的节点应该更早接收到事件,相当于沿DOM节点树向下级传播直到事件的实际目标,在浏览器中,是

《JavaScript高级程序设计》学习笔记(5)——面向对象编程

欢迎关注本人的微信公众号"前端小填填",专注前端技术的基础和项目开发的学习. 本节内容对应<JavaScript高级程序设计>的第六章内容. 1.面向对象(Object-Oriented, OO)的语言有一个标志,那就是它们都有类的概念,而通过类可以创建任意多个具有相同属性和方法的对象.前面提到过,ECMAScript中没有类的概念,因此它的对象也与基于类的语言中的对象有所不同. ECMA-262把对象定义为:"无序属性的集合,其属性可以包含基本值.对象或者函数.