js高程读书笔记(1-3章)

一、js简介

 js是一种专为与网页交互而设计的脚本语言,由以下三个不同的部分组成:

1.ECMAScript,由ECMA-262(它规定了语言的这些组成部分:语法,类型,语句,关键字,保留字,操作符,对象)定义,提供核心语言功能;(ECMAScript就是对实现该标准ECMA-262规定的各个方面内容的语言的描述。)

2.文档对象模型(DOM)是针对XML但经过扩展用于HTML的应用程序编程接口。DOM把整个页面映射为一个多层节点结构。

如下面这个HTML页面:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>mytitle_Dom</title>
</head>
<body>
    <p>hello world!</p>
</body>
</html>

在DOM中,这个页面可以如1.1所示的分层节点图表示

技术分享

3.浏览器对象模型(BOM),处理浏览器窗口和框架。

总而言之,理解下:

1.ECMAScript 是ECMA(欧洲计算机制造协会)注册的标准,除此之外还有微软的Jscript标准 和网景的JavaScript 标准。
2.dom和bom 都是JavaScript 中的宿主对象。
一般来说JavaScript 都指的是ECMAScript

二、在HTML中使用JS

2.1<script>元素

HTML4.01为<script>定义了下列5个属性。

1)charset:可选。表示通过src属性指定的代码的字符集,大多数浏览器会忽略这个值。

2)defer:可选。表示脚本可以延迟到文档完全被解析和显示之后再执行。

3)language:已废弃。原来用于表示编写代码使用的脚本语言,大多数浏览器会忽略这个值。

4)src:可选。表示包含要执行代码的外部文件。

5)type:必需。可以看成是language的替代属性;表示编写代码使用的脚本语言的内容类型(也成为MIME类型)。虽然text/javascript和text/ecmascript都已经不被推荐使用,但还是可以看到经常使用text/javascript。实际上,服务器在传送JS文件时使用的MIME类型通常是application/x-javascript,但在type中设置这个值却可能导致脚本被忽略。

2.1.1标签的位置

  按照惯例,所有<script>元素都应该放在页面的<head>元素中,这种做法的目的是把所有外部文件(包含CSS文件和JavaScript文件)的引用都放在相同的地方。可是,在文档<head>元素中包含所有JavaScript文件,意味着必须等到全部JS代码都被下载,解析和执行完成以后,才能呈现页面的内容(浏览器遇到<body>标签才开始显示内容)。如果有很多JS代码要加载,那么会导致浏览器呈现明显的延迟,延迟期间,浏览器窗口将会是一片空白。为了避免这个问题:

①可将JS引用放在<body>元素中,放在页面的内容后面。

②延迟脚本,<script>标签定义了defer属性。这个属性的用途是表明脚本在执行时不会影响页面构造,也就是说,脚本会被延迟到整个页面都解析完毕后再运行。

2.1.2在XHTML中的用法

  在HTML中,有特殊的规则则用以确定<script>元素中的哪些内容可以被解析,但这些特殊的规则在XHTML中不适用。如小于号("<")在XHTML中就需要用"&lt",不过可以用一个CData片段来包含JS代码

<script type="text/javascript">
<![CDATA[
    function compare(a,b){}
]]
</script>

三、基本概念

3.1变量

ECMAScript的变量是松散类型(可以用来保存任何类型的数据)的,每个变量仅仅是一个保存值的占位符而已。定义变量时用var操作符(var是一个关键字),后跟变量名(即一个标识符)。

  注:在函数体内用var 定义的变量是局部变量,函数退出后就会被销毁。不过在函数体内定义的变量省略var操作符后,此变量就是全局变量,只要调用过一次函数,此变量就有了定义,在函数外部可以被访问到。

3.2数据类型

参见http://www.cnblogs.com/wj204/p/3402204.html

3.3操作符

①一元操作符:

递增和递减操作符:

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.100000000(由于浮点舍入错误所致)

o--;//值变成数值-2

一元加和减操作符:

var s1="01";

var s2="1.1";

var s3="z";

var b=false;

var f=1.1;

var o={valueOf:function(){return -1;}};

s11=+s1;//值变成数值1  

s12=-s1;//值变成数值-1

s21=+s2;//值变成数值1.1

s22=-s2;//值变成数值-1.1

s31=+s3/-s3;//值变成NaN

b=+b/-b;//值变成了数值0

f11=+f;//值仍然是1.1

f12=-f;//值变成-1.1

o11=+o;//值变成数值-1

o12=-o;//值变成数值1

 3.4函数

3.4.1理解参数

  在ECMAScript中的参数在内部用一个数组来表示。在函数体内可以通过arguments对象来访问这个参数数组,从而获取传递给函数的每一个参数。其实,arguments对象只是与数组类似,因为可以使用方括号语法访问它的每一个元素(即第一个元素是arguments[0],第二个元素是arguments[1])

 function howManyArgs(){

  alert(arguments.length);

}

howManyArgs("string",45);  //2

howManyArgs);  //0

howManyArgs(12);  //1

与参数有关的方面:

①“重载”特性:

function doAdd(){

  if(arguments.length==1){

    alert(arguments[0]+10);

  }else if(arguments.length==2){

    alert(arguments[0]+arguments[1]);

  }

}

doAdd(10); //20

doAdd(30,20);//50

②arguments对象可以与命名参数一起使用,如:

function doAdd(num1,num2){

  if(arguments.length==1){

    alert(num1+10);

  }else if(arguments.length==2){

    alert(arguments[0]+num2);

  }

}

doAdd(10); //20

doAdd(30,20);//50

  在重写后的这个doAdd()函数中,两个命名参数num1,num2都与arguments对象一起使用。由于num1的值与arguments[0]的值相同,因此它们可以互换使用。

注:没有传递值的命名参数将被自动赋予undefined值。这就跟定义了变量却没有初始化一样。(ECMAScript中的所有参数传递的都是值,不可能通过引用传递参数。)

3.4.2没有重载

  如果在ECMAScript中定义了两个名字相同的函数,则该名字只属于后定义的函数(前面定义的函数将无效)【要做到重载可以跟3.4.1.①一样,通过检查函数中参数的类型和数量并作出不同的反应,这模仿了方法的重载】

小结:

  JavaScript的核心语言特性在ECMA-262中是以名为ECMAScript的伪语言的形式来定义的。ECMAScript中包含了所有基本的语法、操作符、数据类型以及完成基本的计算任务所必需的对象,但没有对取得输入和产生输出的机制做出规定。理解ECMAScript及其纷繁复杂的各种细节,是理解其在Web浏览器中的实现--javascript的关键。目前大多数实现所遵循的都是ECMA-262第三版中定义的ECMAScript。以下简要总结下ECMAScript中的基本要素:

①:ECMAScript中的基本数据类型包括undefined,null,boolean,number和string;

②:ECMAScript没有为整数和浮点数值分别定义不同的数据类型,Number类型可用于表示所有数值;

③:ECMAScript中也有一种复杂的数据类型,即Object类型,该类型是这门语言中所有对象的基础类型;

④:ECMAScript提供了很多与C及其他类C语言中相同的基本操作符,包括算术操作符、布尔操作符、关系操作符、相等操作符及赋值操作符等。

⑤:ECMAScript从其他语言中借鉴了很多流控制语句,例如if语句、for语句和switch语句等。ECMAScript中的函数与其他语言中的函数有不同之处(没注意到)

⑥无须指定函数的返回值,因为任何ECMAScript函数都可以在任何时候返回任何值。

7:未指定返回值的函数返回的是一个特殊的undefined值。ECMAScript中也没有函数签名的概念,因为其函数参数是以一个包含零或多个之的数组的形式传递的。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。