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

第3章 基本概念

3.1.1 Page 19 区分大小写

ECMAScript中的一切(变量、函数名和操作符)都区分大小写。


3.1.2 Page 19 标识符

标识符,指变量、函数、属性的名字,或者函数的参数。
标识符格式规则:
1、第一个字符必须是字母、下划线(_)或者美元符号($);
2、其他字符可以是字母、下划线、美元符号或者数字;
3、标识符一般采用驼峰大小写格式,即第一个字母小写,剩下每个单词的首字母大写;
4、关键字、保留字、true、false和null不能做标识符。


3.1.3 Page 20 注释

单行注释用 ://
多行注释用:
/*
*(可以省略)
*(可以省略)
*/


3.1.4 Page 20 严格模式

ECMAScript 5 引入了严格模式(strict mode),可以在JavaScript代码顶部添加如下代码(或者函数内部的顶部):
“use strict”;


3.1.5 Page 20 语句

单条语句都建议以一个分号“;”结尾;
多条语句可以放入一个花括号里“{}”;
如:
{
var a=1;
alert(a);
}


3.2 Page 21 关键字和保留字

严格模式
关键字,用于表示控制语句的开始或结束,或者用于执行特定操作等:
break  case  catch  continue  debugger  default  delete  do  else  finally  for  function  
if  in  instanceof  new  return  switch  this  throw  try  typeof  var  void  while  with 

保留字,可能将来被用作关键字:
abstract  boolean  byte  char  class  const  debugger  double enum  export  extends  final  float  goto  implements import  int
interface  long  native  package  private  protected  public  short  static  super  synchronized  throws  transient  volatile let yield eval arguments

非严格模式
保留字:
class  const  enum  extends  import  super


3.3 Page 22 变量

ECMAScript的变量是松散型的,可以用来保存任何类型的数据,仅仅是一个用来保存值的占位符。

变量操作符var 后面跟变量名:
var a;(像这样未经过初始化,即未赋值的变量,会保存一个特殊值undefined)

也可以直接给变量赋值:
var a=“Aubrey”; (变量就保存了一个字符串)

注意:var操作符定义的变量将成为定义该变量的作用域中的局部变量。即,如果在一个函数中用var定义一个变量,则这个变量在函数退出后就会被销毁。

定义多个变量,例:
var message = "hi",
      found = false,
       age = 29;


3.4 Page 23 数据类型

ECMAScript中有五种简单数据类型(也称为基本数据类型)+1种复杂数据类型。
基本数据类型:
1、Undefined 未定义
2、Null 空
3、Boolean 布尔值
4、Number 数字
5、String 字符串

复杂数据类型:
Object 对象


3.4.1 Page 23 typeof操作符
 
typeof 操作符用来鉴定数据类型。它可返回的值有以下:
1、undefined 未定义
2、boolean 布尔值
3、string 字符串
4、number 数字
5、object 对象
6、function 函数

使用语法:
var a = “Gabriel”;
alert(typeof a); 变量外可以不加括号
alert (typeof (a)); 也可以加括号
alert (typeof 25);


3.4.2 Page 24 Undefined 类型

Undefined数据类型只有一个值,undefined。
可以给变量显示地赋值为undefined(不推荐),或者申明一个未初始化的变量(默认值为undefined)。


3.4.3 Page 25 Null类型

Null数据类型只有一个值,null。
Null值表示一个空指针对象,因此当使用typeof操作符检测数据类型时会返回object。
建议:只要在要保存对象的变量还没有真正保存对象,就应该明确地让该变量保存null值。


3.4.4 Page 26 Boolean类型

Boolean数据类型有两个值,true和false。
ECMAScript中所有类型的值都有与这两个Boolean值等价的值。
要将一个值转换为其对应的Boolean值,可以调用转型函数Boolean(),如:
var a = "Aubrey";
var b = Boolean(a);
b的返回值是:true

                             Boolean转型函数的转换规则
数据类型转换为true的值转换为false的值
Booleantruefalse
String任何非空字符串" "(空字符串)
Number任何非零数字值(包括无穷大)0和NaN
Object任何对象null
Undefinedn/a(或N/A),no application不适用undefined

扩展:if循环语句会自动把数据类型转换为Boolean值。如下:
var message = "Aubrey";
if(massage){
alert("Value is true");
}


3.4.5 Page 27 Number类型

数值字面量格式:

扩展:JavaScript数值可以保存(+0)和(-0),这两个值被认为是相等的。

1.浮点数值

所谓浮点数值,指的是该数值中必须包含一个小数点,小数点后必须包含一位及以上数字,ECMAScript会将那些小数点后面带有6个0以上的浮点数值转为科学计数法表示。虽然小数点前可以没有整数,但是不推荐这种写法。
  • 对于极大或极小的数值,可以采用科学计数法表示,如:312550000可以表示为3.125e7(即3.125乘以7的10次)
  • 浮点数值的最高精度是17位小数,由于使用基于IEEE754数值的浮点计算,有时出现问题:比如,0.1+0.2=0.30000000000000004。
  • 浮点数值加减舍入误差问题单独写了一篇文章http://blog.csdn.net/einafetsslly/article/details/77771846
2.数值范围
  • ECMAScript能表示的最小数值保存在Number.MIN_VALUE中,一般为5e-324;超过这个数值将会被转换为-Infinity(负无穷)。
  • ECMAScript能表示的最大数值保存在Number.MAX_VALUE中,一般为1.7976931348623157e+308;超过这个数值将会被转换为+Infinity(正无穷)。
  • Infinity是不能参与计算的,因此要判断一个数值是否是有穷的,可以使用isFinite()函数。
            实例:
var result = Number.MAX_VALUE + Number.MAX_VALUE;
alert(isFinite(result));
            返回结果是:false

3.NAN(Not a Number)非数值

  • 任何数值与非数值进行计算都会返回NaN;
  • NaN与任何值都不想等,包括NaN本身;
  • isNaN()函数:判断一个值是否是非数值,先会尝试把该值转换为数值(比如字符串“10”可以被转换被数值10,true可以被转换为数值1)。
4. 数值转换

有3个函数可以把非数值转换为数值:Number()、parseInt()、parseFloat()

Number():适用于任何数据类型,转换规则如下:
  • Boolean值的true和false转换为1和0;
  • 数字值则返回数字值;
  • null值则返回0;
  • undefined值则返回NaN;
  • 字符串:
    • 字符串里含有数字值(什么格式的都行),则会返回想对应的十进制数值;
    • 空字符串,则返回0;
    • 不含数值的非空字符串,则返回NaN。
parseInt():用于把字符串转换为数字值,或者把小数转换为正数(直接去掉小数部分):
  • 当字符串的第一个字符是非数字或者负号时,返回NaN;
  • 否则会解析到非数字字符为止,如parseInt("1234blue")=1234;
  • 可以为此函数提供一个参数(告诉它转换时使用多少进制),如parseInt("070","8");
parseFloat():用于把字符串转换为数字值,但是它只能解析十进制数字,且只能识别一个小数点,碰到第二个小数点时停止解析,如parseFloat("01.23.4")=1.23;


3.4.6 Page 32 String 字符串类型

字符串需要用双引号“”或者单引号''包围,它是不可变的。
1.字符字面量
也叫转义序列,用于表示非打印字符,或者具有其他用途的字符。
字面量含义
\n换行
\t制表
\b退格
\r回车
\f进纸
\\斜杠
\'单引号
\''双引号
\xnn不常用,不摘录
\unnnn不常用,不摘录

比如:
<script>
	var a = "Aubrey\nAubrey";
	alert(a);
</script>
运算结果是:
Aubrey
          Aubrey

2.转换为字符串

方法一: toString(),适用于数值、布尔值、对象和字符串值,不适用于undefined和null。
语法实例:
var a = 10;
alert(a.toString());     //会得到字符串10
一般不需要传递参数(即括号里不用填参数),但可以填入2、8、10、16代表所需传回的数的进制数(默认的进制数为10)。如:a.toString(8)

方法二:String(),使用于任何数据类型
转换规则:
  • 数据有toString()方法时返回toString方法的值;
  • 数据为null时返回null;
  • 数据为undefined时返回undefined;
扩展:值转字符串的方法:“”+值

3.4.7 Page 35 Object类型
ECMAScript中的对象其实就是一组数据和功能的集合。
对象可以通过执行new操作符后跟要创建的对象类型名称来创建。例:
var o = new Object();


3.5 Page 36 操作符

操作符用来操作数据值,包括算术操作符(如加减乘除)、位操作符、关系操作符和相等操作符。

3.5.1 Page 36 一元操作符
只能操作一个值的操作符叫一元操作符,适用于数值、字符串、布尔值、对象。

1.递增和递减操作符:分为前置型(++和--操作符放在变量前)和后置型(++和--操作符放在变量后)

++ 自增1
-- 自减1

前置型和后置型的区别在于,前置型变量自增自减后的值是在语句被求值以前改变的,后置型变量自增自减后的值是在语句被求值之后改变的。
此规则只影响多次计算的语句,不影响单词计算的语句。如下:

实例1:
var a = 20;
a++;   //a = 21
实例2:
var a = 20;
++a;    //a = 21 
实例1和实例2都是单次计算的语句,因此不受影响,a的值都为21。

实例3:
var a = 20;
var b = a-- + 1;   //b = 21
var c = a +1;      //c = 20
实例4:
var a = 20;
var b = --a + 1;   //b = 20
实例3中a的值实在b的计算语句结束后再自减1的,实例4中则是在计算c的值时同时自减1了。

2.一元加(+)和减(-)操作符

放在等号后数值前,加号不会对数值产生影响,减号可以将正数转为负数。
而放在等号前,如下:
var a = 5;
a+=3;   //a = 8, 意为a = a + 3


3.5.2 位操作符
1.按位非(NOT)
按位非操作符是一个波浪线(~),结果是返回数值的反码,即操作数的负值减1。
实例:
var a = 25;
var b = ~a;    //b=-26

2.按位与(AND)
按位与操作符是一个和号字符(&),返回结果只有两个值,1和0。
目前还没见到哪里有用到,所以不做摘录,详见Page 41 。

3.按位或(OR)
按位或操作符是一个竖线符号(|),
返回结果只有两个值,1和0。
目前还没见到哪里有用到,所以不做摘录,详见Page 41 。

4.按位异或(XOR)
按位异或操作符是一个插入符号(^), 返回结果只有两个值,1和0。
目前还没见到哪里有用到,所以不做摘录,详见Page 42 。

5.左移
左移操作符(<<),会将数值的所有位向左移动指定的位数。
实例:
var a = 2;
var b = a << 5;   //b=64

6.有符号的右移
有符号右移操作符(>>), 会将数值向右移动,但保留符号位。

7.无符号右移
无符号右移操作符(>>>),会将数值的所有位(含符号位)向右移动。

3.5.3 Page 44 布尔操作符
布尔操作符一共有3个:非(NOT)、与(AND)和或(OR)。

1.逻辑非(NOT)

逻辑非操作符由一个叹号(!)表示,可以应用于ECMAScript中的任何值。它会将被操作数先转换为一个布尔值,然后对其求反。

实例:
alert(!false);       //true
alert(!"");            //true
alert(!"blue");     //false

同时使用两个逻辑非操作符,相当于Boolean()转型函数,可以将一个值转换为其对应的布尔值。
如:
alert(!!"blue");    //true


2.逻辑与(AND)

逻辑与操作符由两个和号(&&)表示,可以应用于任何类型的操作数,只有两个值都为真时才为真。
逻辑与操作属于短路操作,即如果第一个操作符能决定结果,就不会对第二个操作符求值。

实例:

var result = (false && true);
alert(result);        //结果为false,因为第一个值为false

var result = (true && true);
alert(result);        //结果为true,判断完第一个值后又继续判断了第二个值

3.逻辑或(OR)

逻辑或操作符由两个竖线符号(||),与逻辑与操作符类似,它也是短路操作符,有一个为真即为真。

3.5.4 Page 47 乘性操作符
ECMAScript定义了3个乘性操作符:乘法、除法和求模(求余数)。
当操作数为非数值时,会先使用Number()转型函数将其转换为数值,再进行计算。

1.乘法
乘性操作符由一个星号(*)表示。
Infinity*0=NaN;

2.除法
除法操作符由一个斜线符号(/)表示。
Infinity/Infinity=NaN;
0/0=NaN;

3.求模
求模操作符由一个百分号(%)表示,就是求余数。
实例:
var result = 26%5;     //等于1
无穷%有限=NaN;
有限%0=NaN;
无穷%无穷=NaN;

3.5.5 Page 48 加性操作符
1.加法
加法操作符由一个加号(+)表示,计算顺序从左至右,加()可以改变执行顺序。

2.减法
减法操作符由一个减号(-)表示,计算顺序从左至右,加()可以改变执行顺序。

3.5.6 Page 50 关系操作符
小于(<)、大于(>)、小于等于(<=)和大于等于(>=)。
如果两个操作数都是字符串,则比较两个字符串对应的字符编码值。
大写字母的字符编码全部小于小写字母的字符编码。
任何操作数与NaN进行关系比较,结果都是false。

3.5.7 Page 51 相等操作符
1.相等和不相等 (==和!=)

比较前,会先转换操作数(通常称为 强制转换) 。
null == undefined;
NaN != NaN;

2.全等和不全等(=== 和 !==)

直接比较,不会进行强制转换。
null === undefined;

3.5.8 Page 53 条件操作符(三目运算符)
(条件语句)?代码1:代码2;
代码1:条件语句为true时执行的代码;
代码2:条件语句为false时执行的代码。

3.5.9 Page 53 赋值操作符
1.简单赋值操作符

简单的赋值操作符由等于号(=)表示,把右侧的赋值给左侧的变量。
实例:
var num = 10;
num = num + 10;

2.复合赋值操作符

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

实例: num=num+10 就等同于 num+=10

3.5.10 Page 54 逗号操作符
使用逗号操作符就可以在一条语句中执行多个操作。
如:
var num1=1,num2=2,num3=3;


3.6 Page 54 语句

语句,也成为流控制语句,通常使用一或多个关键字来完成给定任务。

3.6.1 Page 54 if语句
语法1:
if(条件){
代码1;
} else {
代码2;
}

语法2:
if(条件){
代码1;
} else if {
代码2;
} else{
代码3;
}
其中else if 语句不限制个数。

3.6.2 Page 55 do-while语句
do-while语句是一种后测试循环语句,即只有在循环体中的代码执行后,才会测试出口条件。

语法:
do{
代码;
} while(条件);

实例:
var i = 0;
do {
i += 2;
} while (i<10);
alert(i);      //结果为10

3.6.3 Page 55 while语句
while语句属于前测试循环语句,即在循环体内的代码被执行之前,会对出口条件求值。

语法:
while(条件){
代码;
}

3.6.4 Page 56 for语句
for语句也是一种前测试循环语句,但是它具有在执行循环之前初始化变量和定义循环后要执行的代码的能力。

语法:
for(变量初始化;条件;循环语句){
代码;
}
变量的初始化也可以放在for循环外。
如:
var count = 10;
var i;      //变量初始化;
for(i=0;i<count;i++){
  alert(i);
}

由于ECMAScript中不存在块级作用域,因此在循环内部定义的变量也可以在外部访问到。

另外,for语句中的初始化表达式、控制表达式和循环后表达式都是可选的。将这三个表达式全部省略,则会创建一个无限循环。

3.6.5 Page 57 for-in语句
for-in 语句是一种精准的迭代语句,可以用来遍历数组或对象的属性。

语法:
for(变量in对象){
代码;
}

实例:
var a={fname:"John",lname:"Doe",age:25};
var text="";
var x;
for(x in a){
text+=a(x);
}     //输出结 果为 John Doe 25

当要遍历的对象的变量值为null或undefined时,会停止执行循环体。

3.6.6 Page 58 label语句
使用label语句可以在代码中添加标签,以便将来使用。

语法:
标签名:代码(一般都是循环语句)

实例:
start:for(var i=0;i<count;i++){
alert(i);
}
这个例子中的start标签可以在将来由break或者continue语句引用。

3.6.7 Page 58 break和continue语句
break和continue用于在代码中精确地控制代码的执行。

break:停止/中断循环,强制继续执行循环后面的语句。

continue:跳过此次循环继续从循环的顶部继续循环。

break/continue与label标签合用的循环嵌套实例请见P59。

3.6.8 Page 60 with语句
with语句的作用是将代码的作用域设置到一个特定的对象中。

语法:
with(对象){
代码;
}

实例:
var qs = location.search.substring(1);
var hostName = location.hostname;
var url = location.href;
以上代码可以简写为:
with(location){
var qs = search.substring(1);
var hostName = hostname;
var url = href;
}

严格模式下,不允许使用with语句,会被视为语法错误;
在开发大型应用程序时,不建议使用with语句。

3.6.9 Page 60 switch语句
语法:
switch(表达式:可以是任何数据类型){
case value1:代码1;
break;
case value2:代码2;
break;
...
default:代码N;
}

case的意思是:如果表达式等于这个值(value),则执行后面的代码。
switch在比较值时使用的是全等操作符,因此不会发生类型转换。


3.6 Page 62 函数

ECMAScript中的函数使用function关键字来申明,后面跟一组参数以及函数体。函数可以通过函数名来调用,后面还要加上一堆圆括号和参数(圆括号中的参数如果有多个,可以用逗号隔开)。

语法:
function 函数名(参数1,参数2){
代码;
}

return返回值

--返回值用return 定义,如:return a;
--函数在定义时不必指定是否返回值;
--函数会在执行完return语句后会立即停止并退出;
--一个函数中可以有多个return语句,如:函数中放一个if循环语句,if里加一个return,else里加一个return;
--return语句也可以不带有任何返回值,函数在停止执行后将返回undefined。

3.7.1 Page 64 理解参数
EcMAScript中的参数在内部是用一个数组来表示的,没有数量和数据类型要求。
在函数体内可以通过arguments对象来访问这个参数数组,从而获取传递给函数的每一个参数。
函数中 命名的参数只提供便利,但不是必需的;没有传递值的命名参数将自动被赋予undefined值。

参数数组的长度可以写作:arguments.length
参数:arguments[0]代表第一个参数,arguments[1]代表第二个参数,以此类推。

实例:
function doAdd(num1,num2){
if(arguments.length==1){
alert(num1+num2);
} else if (arguments.length==2){
alert(arguments[0]+num2);
}
}
上面的实例中,num1=arguments[0]

3.7.2 Page 66 没有重载
在ECMAScript中的函数不能实现重载,即不能同时命名两个名字相同的函数,如果存在两个函数名相同的函数,则该名字只属于后定义的函数。
























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值