ECMAScript 笔记

ECMAScript 笔记

(一)前言

一、

一个完整的javascript应该由下列三个不同的部分组成
核心,文档对象类型,浏览器对象类型ECMAScript,DOM,BOM
提供核心的语言功能,提供访问和操作网页内容的方法和接口,提供与浏览器交互的方法和接口

DOM是针对XML但经过扩展用于HTML的应用程序编程接口

1
2
3
4
5
6
7
8
<html>
<head>
<title></title>
</head>
<body>
<p>Hello World!</p>
</body>
</html>

借助这些DOM提供的API,开发人员可以轻松的删除,添加,替换和修改
开发人员使用BOM可以可以控制浏览器以外的部分
二、
Script的6个属性

  • async:立即下载脚本,且不影响其他页面的操作
  • Charset:设置字符集,表示通过src属性指定的代码的字符集
  • Defer:对外部脚本文件有效,表示脚本可以延迟到文档解析完毕之后再执行
  • Language:(废弃)设置编写代码使用语言,JavaScript,JavaScript1.2,VBScript
  • Src:表示包含要执行代码的外部文件
  • Type:language的替代,表示编写代码使用的脚本语言的内容类型(也称MIME:多用于指定一些客户端定义的文件名,以及一些媒体文件的打开方式)

引入JavaScript代码的方式:

  • 1.嵌入式:<script type="text/javascript"></script>
    a)text/javascript是默人的类型,可以省略
    b)Type类型:text/javascript,text/ecmascript,application/x-javascript,application/javascript,application/ecmascript
  • 2.链入式:<script type="text/javascript" src="example.js"></script>
    a)XHML中,使用单标签,HTML中要使用<script></script>
    b)链入文件的时候,浏览器不会 检查.js扩展名,但是为了服务更准确的响应MIME类型,建议写上相应的后缀
  • 3.无论如何包含代码,只要没有deferasync,浏览器会顺序执行<script>

三、
1.标签的位置

传统是将<script>包含在<head>里面,但是这样的会容易造成页面加载延迟,所以建议将<script>代码放置于</body>之前,这样就可以先加载页面,而后加载script代码,给用户带来良好额体验

2.脚本延迟
a)Defer可以实现延迟脚本到页面加载完毕再执行的效果,相当于告诉浏览器先下载,但是延迟执行<script type="text/javascript" src="example.js" defer="defer"></script>
b)但是现实中,延迟脚本不一定会按照顺序执行,也不一定会在DOMContentLoaded事件触发前执行,所以,建议只包含一个延迟脚本
c)Defer只适用于外部脚本文件

3.异步脚本
a)Async属性,只适用于外部文件,目的是不让页面等待脚本加载完毕再执行

4.在XHTML中的js
对于严格的XHML来说,在HTML中的代码一般是不能再XHML中正确运行的,相对简洁规范的解决方法就是,使用注释的AData片段

1
2
3
4
5
<script type="text/javascript">
//<![CData[
……
//]]
</script>

四、
1.使用文档类型
a)默认是混杂模式,但是不建议使用
b)建议使用标准模式和准标准模式

标准模式

1
2
3
4
5
6
7
8
9
10
11
12
HTML 4.01 Strict<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
XHTML 1.0 Strict<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
准标准模式
HTML 4.01 Transitional<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
HTML 4.01 Frameset<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
"http://www.w3.org/TR/html4/frameset.dtd">
XHTML 1.0 Transitional<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
XHTML 1.0 Frameset<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

五、

1
2
3
4
<noscript>可以在浏览器不支持或者脚本禁止的情况下显示标签里面的内容,可以作为友好提示选项使用
<noscript>
<p>此页面需要浏览器支持(启用)脚本</p>
</noscript>

(二)javascript的基本概念

  • 1.ECMAScript是严格区分大小写的,就是说,你的example和你的Example是完全不一样的两- 个变量
  • 2.注意标识符写法,ECMAScript一般采用驼峰式的写法,例如:firstSecond
  • 3.使用编译指示,”use strict”; 告诉JS引擎切换到严格模式
  • 4.建议在结束语句末尾使用分号,可以减少错误的发生,利于压缩
  • 5.建议使用代码块,即使只有一条语句

二、
变量:ECMAScript的变量是松散类型的,可以保存任何类型的数据

1.用var定义的变量是局部变量

1
2
3
4
5
6
7
<script>
Function test(){
var a =100; //局部变量
}
Test();
alert(a); //错误!
</script>

正确写法:省略var使a成为全局变量

1
2
3
4
5
6
7
function test(){
a=100;
}
test();
alert(a);
//需要调用一次test函数的原因是使a有定义,这样在函数外部就可以进行访问
//定义全局变量的方法:函数外直接赋值或者使用var 声明或者函数内直接赋值

2.数据类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
a)五种基本数据类型,一种复杂数据类型
i.Undefined,null,Boolean,number,string和object
var aa,
bb=1,
cc="1",
dd=null,
ee={},
a=function(){};
alert(typeof (a)); //function
alert(typeof(aa)); //undefined
alert(typeof(bb)); //number
alert(typeof(cc)); //string
alert(typeof(dd)); //object
alert(typeof(ee)); //object
*可见,null返回的是一个空对象,类型是object
b)对undefined的理解
c)如果定义的变量在将来用于保存对象,则建议将此变量初始化为null,而不是其他
alert(b); //error:b is not defined
var a ;
alert(a); //undefined
*所以,建议显示地初始化变量
alert(null==undefined); //true
d) Boolean,false,true
var a="www";
alert(a); //www
alert(Boolean(a)); //true,注意Boolean严格区分大小写
等价于alert(!!a); //true
if(a){} //隐式转换为bool类型
e) 浮点数的舍入误差
var a=0.1;
var b=0.2;
alert(a+b); //0.30000000000000004,浮点数的误差
f) 数值范围
var a=0.1;
alert(isFinite(a)) //判断是否超出数值范围
alert(Number.MAX_VALUE) //输出数值范围中最大的数值
g) NaN 是一个特殊的值,用于表示一个本来要返回数值的操作数未返回数值的情况
alert(isNaN(1));//false
alert(isNaN(null)); //false
alert(isNaN("10"));//false
alert(isNaN(true));//false
alert(isNaN("a"));//true
alert(isNaN(NaN));//true
h) 数值转换 Number(),parseInt(),parseFloat()
Number是可以对任何类型进行转换,parseInt,parseFloat只能把字符串转换成数值
  • 一、Number
1
2
3
4
5
6
alert(Number(null));//0
alert(Number("a"));//NaN
alert(Number(""));//0
alert(Number("001"));//1
alert(Number(true));//1
alert(Number(NaN));//NAN
  • 二、parseInt
1
2
3
4
5
6
alert(parseInt("122jkdjh"));//122
alert(parseInt(""));//NaN
alert(parseInt("0xA"));//10
alert(parseInt(22.5));//22
alert(parseInt("070",8));//56
alert(parseInt("070",10));//70
  • 三、parseFloat
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
alert(parseFloat("122jkdjh"));//122
alert(parseFloat(""));//NaN
alert(parseFloat("0xA"));//10
alert(parseFloat(22.5));//22
alert(parseFloat("22.00"));//22
alert(parseFloat("3.215e5"));//321500
i) 获得长度.length
var text="h\u03a3";
alert(text.length); //2
j) 转换成字符串:toString(); String();
一、toString()
*null,undefined没有这个方法
var num=10;
var b=null;
alert(num.toString()); //10
alert(num.toString(16)); //a
alert(b.toString()); //error
二、String()
var num=10;
var b=null;
alert(num.String()); //”10”
alert(num.String(16)); //“a”
alert(b.String()); // “null”

3.object类型
js的对象实际就是一组数据和功能的集合,创建对象:var obj=new object();

**object的实例具有以下的属性和方法**

a) construct:用于保存创建当前对象的函数,即构造函数
b) hasOwnProperty(propertyName):用于检查给定的属性在当前的实例中是否存在
c) isPrototypeOf(object):用于检查传入的对象是否是传入对象的原型
d) toLocaleString();返回对象的字符串表示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
举个例子:
//定义一个"2013-07-21 13:12:59 231"的Date对象
var date = new Date(2013, 6, 21, 13, 12, 59, 231);
document.writeln( date.toLocaleString() );
// IE: 2013年7月21日 13:12:59
// Chrome: 2013年7月21日 下午1:12:59
// FireFox: 2013/7/21 下午1:12:59
//定义一个"公元前200-06-28 08:24:35 105"的Date对象
var date2 = new Date(-199, 5, 28, 8, 24, 35, 105);
document.writeln( date2.toLocaleString() );
// IE: Sun Jun 28 08:24:35 UTC+0800 200 B.C.
// Chrome: 200年7月1日 上午8:30:27 (缺少负号,日期存在问题)
// FireFox:200/6/28 上午8:30:32 (缺少负号)
e) toString():返回对象的字符串表示
f) valueOf();返回对象的字符串,数值或布尔值表示

所有对象都具有这些属性和方法