Flyingis
Mushup--思想流动,相互融合
博客园
首页
新随笔
新文章
联系
管理
订阅
随笔- 88 文章- 8 评论- 828
ECMAScript 基础
作者:
Flyingis
JavaScript的核心之一ECMAScript的语言特性和Java、C、Perl都有许多相似之处,其中不少特性都是从这些语言借鉴而来,同时它们之间也存在许多差异。下面列举一些ECMAScript的基本特性。
--和Java一样,ECMAScript区分大小写,注释的格式相同,通过{}确定代码块,原始数据类型存储在堆栈,对象的引用存储在堆中
--ECMAScript是一种松散的语言,ECMAScript通过var操作符声明变量,并且不限类型,例如var n = 25,那么n就是数字类型,var n = "string" ,那么n就是String类型
--在每一行代码后,可以不写分号,ECMAScript自动认为该行的末尾为该行代码的最后;ECMAScript中的变量可以不用初始化,在幕后系统将自动完成初始化操作
--同一变量可以赋予不同类型的数据;变量的第一个字符只能是字母、下划线或$ ,其他的字符可以是下划线、$、或任意的字母、数字、字符
--和其他语言一样,变量最好遵循驼峰书写法,或Pascal表示法、或匈牙利表示法
--和大多数语言不同的是, ECMAScript 变量在使用之前可以不必声明,系统会自动将该变量声明为全局变量,例如var m = " Good " ; n = m + " Morning " ; alert(n)输出结构是 " Good Morning "
--在大多数语言里,String是对象,在ECMAScript中却是原始数据类型
原始数据类型
ECMAScript原始数据类型有五种:Undefined、Null、Boolean、Number、String。
typeof—判断变量和值的数据类型,通常有#ff0000、boolean、number、string、object五种类型。
Undefined—当变量被声明但没有初始化,或函数没有明确返回一个值的时候,该变量或函数即为 Undefined 类型。
Null—undefined是null的一种派生,当代表一个对象的值不存在时,该对象返回null。
Boolean—包含两个值,true and false , false不等于0,但0可以转换为false 。
Number—可以定义32位整型数据或64位浮点型数据。定义数字类型变量时,在数字前加0即为八进制,加0x为十六进制,它们计算后返回的结果统一为十进制。通过var f = 1.0可以定义一个浮点类型变量,有意思的是,当f被用于计算之前,它实际是以 String类型存储的。当浮点类型数据很大或很小时(可以前后移动六位),将使用E表示法来表示浮点数据,最大可以存储17位数据。另外, isFinite()方法可以判断一个数值是否有限,isNaN()方法可以判断一个数据是非数字类型。
String—String在ECMAScript中是原始数据类型,并且是唯一没有空间大小限制的数据类型。和Java不同的是,var s = " javascript " 和var s = 'javascript'均是合法的表示方法。
数据转换
在不同数据类型之间转换是任何一门编程语言的一个重要特性,ECMAScript提供了一系列简单的方法来实现数据的转换,大多数数据类型都提供了简单的转换方法,对于复杂的转换则有一些全局方法来完成,不管是哪一种方法,ECMAScript中数据转换都非常简单。
Boolean、number和string数据类型是原始数据类型,但它们同时是伪对象(在ECMAScript中伪对象到底该怎么解释,运行机制如何还不清楚?有人知道请给予解答),拥有自己的属性和方法,可以通过toString()方法来实现string类型的转换。ECMAScript定义所有的对象,不管是伪对象还是真实的对象,都可以实现toString()方法,string被列为伪对象的行列,自然也拥有toString()方法。将数字类型数据转换为string的时候,可以在 toString() 方法中加入2、8、16参数,来实现不同进制的数据输出,例如var n = 10; alert(n.toString(2))输出为1010,alert(n.toString(8))输出为12,n.toString()和 n.toString(10)相同。
ECMAScript提供了两种方法来实现string类型转化为数字类型的方法:parseInt()和parseFloat()。其他类型转换将会返回 NaN(Not a Number)。
Type Casting
ECMAScript数据类型的转换通常可以通过三个方法来实现:Boolean(value)、Number(value)和String(value),这样通常会产生一些非预期的结果。
Boolean
var
b1
=
Boolean(
""
);
//
false–empty string
var
b2
=
Boolean(
"
hi
"
);
//
true–non-empty string
var
b3
=
Boolean(
100
);
//
true–non-zero number
var
b4
=
Boolean(
null
);
//
false-null
var
b5
=
Boolean(
0
);
//
false-zero
var
b6
=
Boolean(
new
Object());
//
true–object
Number
Number(
false
)
0
Number(
true
)
1
Number(undefined) NaN
Number(
null
)
0
Number(
"
5.5
"
)
5.5
Number(
"
56
"
)
56
Number(
"
5.6.7
"
) NaN
Number(
new
Object()) NaN
Number(
100
)
100
String
String()能实现所有类型数据的直接转换,和使用toString()不同的是,String()能够将null或undefined数据转换为string。
引用类型
ECMAScript 实际上并没有传统意义上的类,只是通过定义对象来等同于其他语言中的类,这一点我还比较含糊,以后可能会明白,在文中还是以“类”来说明。
var
ob
=
new
Object();
以上定义了一个Object对象的实例,这种语法和Java比较类似。当有参数的时候需要括号来引用,当不存在参数时,括号可以去掉。由于 ECMAScript语言比较松散,不管是前面所属的基础语法,还是后面将提到的语法知识,我们都应该尽量按照一定的书写规范来约定自己的代码格式,而不应充分发挥语言松散的特点。
Object类
Object类和Java里的java.lang.Object类比较相似,它是ECMAScript中其他所有类的基类,它具有如下属性:
constructor—建立对象的函数的一个引用,对于Object类而言,该引用指向本地Object()方法。
prototype—对象里prototype对象的一个引用值。
Object 类拥有的方法:
hasOwnProperty(property)—判断property属性是否存在于对象中,property数据类型为string
isPrototypeOf(object)— 判断一个对象是否是另一对象的 prototype
propertyIsEnumerable(property)— 判断所给出的属性能否使用 for 语句列举出来
toString()—返回对象的原始类型string
valueOf()—返回对象合适的原始值,对于多数类而言,返回的值和toString()相同
Object类的每一个属性和方法都被其他的类所重写
Boolean类
定义方法var ob = new Boolean(true); ob是Boolean原始数据类型的一个引用。在使用Boolean对象过程中,需要注意,所有的对象会自动转变为true,因此var ob1 = new Boolean(false); var ob2 = ob1 && true; 最后ob2的值是true,非false。一般情况下,使用Boolean原始数据类型可以避免这种情况。
Number类
定义方法var o = new Number(15);
获得原始数据的值var n = o.valueOf();
Number类有一些为数字类型的值特别设计的方法:
alert(o.toFixed(
2
));
//
输出15.00
alert(o.toExponential(
1
));
//
输出1.5e+1
在无法确定使用 toFixed 还是 toExponential 的时候,可以使用 toPrecision 方法来获得取值:
alert(o.toPrecision(
1
));
//
输出 2e+1
alert(o.toPrecision(
2
));
//
输出 15
alert(o.toPrecision(
3
));
//
输出 15.0
String类
String类是一种复杂引用类型,这里仅列出一些常见的方法,其中不少都是模仿java.lang.String:
var
s
=
new
String(
"
Good Morning
"
);
alert(s.valueOf()
==
s.toString());
//
输出true
alert(s.length);
//
输出12
alert(s.charAt(
1
));
//
输出o
var
sr
=
s.concat(
"
!
"
); alert(sr);
//
输出Good morning !
alert(s.indexOf(
"
o
"
);
//
输出1
alert(s.lastIndexOf(
"
o
"
);
//
输出6
alert(s.localeCompare(Good morning));
//
输出0
alert(s.localeCompare(Apple));
//
输出1
alert(s.localeCompare(House));
//
输出-1
alert(s.slice(
2
));
//
输出od morning
alert(s.substring(
2
));
//
输出od morning
alert(s.slice(
2
,
-
5
));
//
输出od mo
alert(s.substring(
2
,
-
5
));
//
输出Go
alert(s.toUpperCase());
//
输出GOOD MORNING
alert(s.toLowerCase());
//
输出good morning
另外,所有String类的方法同样可以用于String原始数据类型,因为它是伪对象。
instanceof
instanceof操作符和typeof作用类似,不同的是,instanceof需要明确指定对象是否属于某种特定类型。例如
var
s
=
new
String(
"
Good morning !
"
);
alert(s
instanceof
String);
操作符和语句
ECMAScript 中大多数操作符、语句和 Java 都比较类似,但也有一些其特有的,如 label 语句, with 语句, for-in 语句等等。
Functions
Functions是ECMAScript的核心,在任何时候任何地方都可以运行的一组代码语句。
function
functionName(arg0, arg1, …… , argN)
{
statements
}
当function没有返回值或return语句后没有值的时候,该function实际上会被系统定义为undefined,当function返回值的时候,function可以不必明确指定为某种数据类型。
关于重载
重载是面向对象语言的基本特性之一,但 ECMAScript 的 functions 并不能重载,在同一范围里可以定义两个完全相同的函数,在调用函数的时候,最后的一个函数发挥作用。这种特性比较麻烦,但可以通过 arguments 对象来实现和重载类似的功能。
function
func()
{
if
(arguments.length
==
1
)
{
alert(arguments[
0
]
+
5
);
}
else
if
(arguments.length
==
2
)
{
alert(arguments[
0
]
+
arguments[
1
]);
}
}
func(
5
);
//
输出10
func(
10
,
15
);
//
输出25
前面提到过,在同一范围里可以定义两个完全相同的function,在调用function的时候,最后的一个function发挥作用。
function
func(i)
{
alert(i
+
10
);
}
function
func(i)
{
alert(i
+
20
);
}
func(
5
);
//
输出25
可以看出,是调用了最后的一个function使得数据结果为25,如果使用Function类来定义以上两个函数,那为什么会使用最后的一个function可能会更明确一些。
var
func
=
new
Function(“i”, “alert(i
+
10
)”);
var
func
=
new
Function(“i”, “alert(i
+
20
)”);
func(
5
);
func指向了另外一个引用,从而值发生了改变,func是作为function对象的引用而存在的,并且允许两个变量指向同一个 function。
和Function类相关的属性、方法有许多,例如length、toString()、valueOf()等等。其中toString()在调试程序中使用较多。
Tag标签:
javascript
posted on 2008-04-15 00:40
Flyingis
阅读(248)
评论(1)
编辑
收藏
所属分类:
JavaScript
社区
新闻
新用户注册
刷新评论列表
标题
姓名
主页
Email
(只有博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
该文被作者在 2008-04-15 14:45 编辑过
另存
打印
所属分类的其他文章:
·
JavaScript 中的继承
·
JavaScript 中的对象
·
ECMAScript 基础
·
JavaScript 基本组成
最新IT新闻:
·
奇虎回应:瑞星半年免费版像是一个恶意软件
·
鲍尔默致员工信:部署09年微软5大工作重心
·
陈一舟:Facebook也抄袭过校内 不怕打官司
·
微软重组视窗与在线业务
·
我国网民数达2.53亿超美国居世界首位
博客园新闻频道
博客园首页
社区
公告
1.本博客上的任何言论仅代表个人观点,与作者所在的公司没有任何关系。所有贴子皆以“现状”提供且没有任何担保,同时也没有授予任何权利。
2.非特殊说明,本站遵守“
创作共用
许可署名。
<
2008年7月
>
日
一
二
三
四
五
六
29
30
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
1
2
3
4
5
6
7
8
9
与我联系
发短消息
留言簿
(57)
给我留言
查看留言
我管理的小组
GIS开发
GIS.DeveloperUnion
我参加的小组
ASP.NET
设计模式
web标准设计
我参与的团队
WebGIS(0/861)
ASP.NET AJAX (Atlas)学习(0/1319)
GIS.DeveloperUnion(开发者联盟)(0/738)
开源GIS学习(0/224)
我的标签
arcgis server
(16)
安装
(7)
dojo
(6)
javascript
(5)
arcgis
(5)
javascript api
(4)
补丁
(3)
ajax
(3)
solaris
(3)
vi
(2)
更多
随笔分类
.Net Framework
ArcEngine(10)
ArcGIS Desktop(6)
ArcGIS Server(24)
ArcIMS(10)
ArcSDE(4)
Diary(8)
GIS 其他(17)
Js|REST API(5)
Linux/Unix(2)
Web 用户体验(2)
随笔档案
2008年7月 (10)
2008年5月 (1)
2008年4月 (8)
2008年3月 (6)
2008年2月 (3)
2008年1月 (8)
2007年12月 (6)
2007年10月 (3)
2007年9月 (5)
2007年8月 (6)
2007年7月 (4)
2007年5月 (2)
2007年4月 (6)
2007年3月 (4)
2007年1月 (3)
2006年11月 (2)
2006年9月 (2)
2006年7月 (4)
2006年4月 (1)
2006年1月 (3)
文章分类
JavaScript(4)
Technology(3)
文章档案
2008年4月 (6)
2005年12月 (2)
收藏夹
测试(1)
个人博客
Flyingis in 3sNews
Flyingis in blogjava
包含Java/Javascript/GIS等一些文章,已停止更新
客户端技术
Dojo
mooTools
prototype
我喜欢的地方
flickr
豆瓣
鲜果
译言
友情链接
GaoYang
Mars
空明流转
蓝色森林
骆驼人
棕熊@Think Fast
搜索
积分与排名
积分 - 139667
排名 - 249
最新评论
1. re: 深入浅出 Javascript API(四)--绘制 Graphics
汗.这个怎么使用esri的API,我还以为JS 内置的API咯......
要是有的话,LZ写出来看看
--egmkang
2. re: Ags 9.3 文档逐步上线
博主,9.3的安装文件在哪下载?
--江南白衣
3. re: 深入浅出 Javascript API(四)--绘制 Graphics
高手。
--zoti
4. re: 深入浅出 Javascript API(四)--绘制 Graphics
有点难度
--专研.NET
5. re: 深入浅出 Javascript API(三)--地图配置
Ags93 javascript&rest api可以调用大多数服务器端的功能(包括新增Geometry服务和GP),如果不是要有状态编辑,一般都可以胜任了,目前webgis主流还是轻量级应用...
--Flyingis
阅读排行榜
1. ArcGIS Server 开发系列(二)--Web ADF 编程(4820)
2. ArcGIS Server 开发系列(四)--ArcGIS Server data sources 开发(4433)
3. BlueViewer 地图加载分析(C#)(4192)
4. ArcGIS Server 开发系列(一)--编程框架总览(4034)
5. ArcGIS Server 开发系列(五)--自定义 Toolbar 工具(3823)
6. ArcGIS 坐标系统文件(3604)
7. ArcGIS Server 开发系列(三)--漫游 Graphics data sources(3118)
8. ArcGIS 9.2 SP2 补丁开始提供下载(3074)
9. Geometry 对象浅析(2846)
10. ArcIMS 连接器--.NET Link 使用方法(2657)
11. ArcGIS Server 体系结构(2544)
12. 乱谈 GIS 中小型应用(2517)
13. 全套 ArcGIS 软件安装(Windows 平台)(2495)
14. ArcGIS Server 开发系列(六)--自定义 Tasks(2460)
15. DBMS的空间扩展(2259)
16. Dojo 之 面向对象(2250)
17. .Net Web ADF 应用中的安全技术(2005)
18. 网站项目管理(1959)
19. ArcGIS Server 9.3 beta 体验二 -- 开发路线(1915)
20. ArcIMS体系结构(1820)
评论排行榜
1. BlueViewer 地图加载分析(C#)(108)
2. ArcGIS Server 开发系列(五)--自定义 Toolbar 工具(107)
3. 长期提供orkut / gmail 邀请(82)
4. ArcGIS Server 开发系列(四)--ArcGIS Server data sources 开发(70)
5. ArcGIS Server 开发系列(六)--自定义 Tasks(65)
6. ArcGIS Server 开发系列(三)--漫游 Graphics data sources(42)
7. ArcGIS Server 开发系列(二)--Web ADF 编程(30)
8. ArcIMS 连接器--.NET Link 使用方法(29)
9. ESRI中国(北京)招聘ArcIMS售后技术工程师(16)
10. ArcGIS Server 9.3 beta 体验二 -- 开发路线(16)