数据和判定是所有“智能”程序的基础。在这章的开始,我们先看一下JavaScript是如何理解、或表示数据的。这个很重要,因为JavaScript包含许多数据类型(data types),而且根据它的数据类型来操作数据。错误的使用不同的数据类型会导致意想不到的结果。我们来看一些常见的数据类型问题,你会明白如何把数据的类型转化成其他的。
我们也会学习条件语句(conditional statements)和循环(loops):两种最有价值的判定工具。为了在计算机语言中进行判定,我们需要让程序知道响应特定的情况应该发生什么,这就需要条件语句来解决。另一方面,循环允许你简单的重复某一动作直到特定的条件被满足。举例来说,你可能需要循环表单里的每个输入以检查它包含的信息是否合法。
我会在这章中从如下许多方面阐述JavaScript:
l 在JavaScript中进行分类和操作:数据类型和数据运算符
l 变量
l 数据类型转换
l 数据对象简介:String、Date和Math对象
l 数组:保存有顺序的数据集合,例如一个购物车中的商品
l 使用条件语句、循环和赋值进行判定
n 注解:这一章中的例子会尽可能的保持简单,因此我们使用document.write()作为一种反馈机制,可以让你方便看到结果。你会在以后的章节中,你会学到其它更流行和通用的方法。
2.1. 数据、数据类型和数据运算符
数据时用来保存信息的。为了更有效的保存数据,JavaScript需要为每个数据分配一个类型(type)。这个类型规定了使用这个数据能来什么或不能干什么。举个例子,JavaScript中有一种数据类型是数值(number),它允许对它拥有的数据进行一些计算。
在JavaScript中用来保存数据的三种基本类型是:
l 字符串(String):一连串的字符,如“some characters”。
l 数值(Number):一个数字,包括浮点数。
l 布尔值(Boolean):包含一个真值(true)或假值(false)。
有时候也被称作基本(primitive)数据类型,因为它们只保存单个值。
还有两个不同的基本数据类型。它们不保存信息,用来对特定的情况给出我们警告:
l 空值(Null):表示没有数据。
l 未定义(Undefined):表示没有定义并赋给其值。 当你处理变量的时候,这个非常重要。
在这一章中我们会大量的使用这些数据类型。
2.1.1. 字符串数据类型
JavaScript解释器要求字符串数据被单引号或双引号括起来(大家都知道的分隔符)。举个例子,这个脚本中,会往页面中写入some characters:
<html>
<body>
<script type="text/javascript">
document.write( "some characters" );
</script>
</body>
</html>
引号不会被写到页面上因为它们不是字符串的一部分;它们只是简单的告诉JavaScript字符串的开始和结束的地方。我们使用单引号也可以轻松的做到:
<html>
<body>
<script type="text/javascript">
document.write( 'some characters' );
</script>
</body>
</html>
两种方法都可以,只要你使用与其打开字符串相同的方法关闭这个字符串,不要试图把它像以下的方式分割开:
document.write( 'some characters" );
document.write( "some characters' );
当然,你可能需要在字符串本身中使用单引号或者双引号,这种情况下你需要使用一个不同的分隔符。如果你使用双引号来标记,这个指令会按你意愿被解释成:
document.write( "Paul's characters " );
但如果你使用单引号来进行标记,它们不会解释成:
document.write( 'Paul's characters' );
这样做会给你一个语法错误,因为JavaScript解释器以为这个字符串在Panl中的l后结束了,它不明白后面要发生什么。
n 注解:JavaScript语法和英语的语法类似,是使语言“可理解”的规则集合。就像英语中一个语法错误会使一个句子显得没有意义,JavaScript中的一个语法错误也会使这个指令没有意义。
你可以使用单引号标志来分隔包含双引号的字符串或者相反:
document.write( "Paul's numbers are 123" );
document.write( 'some "characters"' );
另一方面,如果你想在你的字符串中既包含单引号,也包含双引号,你需要使用转义序列。 实际上,使用转义序列来代替我们使用的引号是一个好的变成习惯。因为它们使你的代码更加易懂。
2.1.1.1. 转义序列
转义序列在你想使用键盘不能打印的字符使得情况下也是有用的。(像日元符,¥, 在西方的键盘中)。
表2-1列出了一些最常用的转义序列
表2-1。常用的转义序列
转义序列
|
字符表示的意思
|
/b |
撤销。 |
/f |
换页。 |
/n |
换行。 |
/r |
回车符。 |
/t |
制表符。 |
/' |
单引号。 |
/" |
双引号。 |
// |
反斜线。 |
/xNN
|
NN 是一个十六进制的数,表示拉丁字符集中的一个字符(拉丁字符集是说英语国家的规范)。
|
/uDDDD
|
DDDD 是一个十六进制的数,表示一个Unicode字符。
|
我们来改进一下这个会引起语法错误的字符串:
document.write( 'Paul's characters' );
使用这个转义序列 (/') 就可以被正确的解释了:
document.write( 'Paul/'s characters' );
这个转义序列告诉JavaScript解释器,这个单引号属于字符串本身,而不是一个分隔符。
ASCII是一个字符编码方法,它使用0-254的值。作为一种选择,我们可以使用十六进制/xNN 转义序列.表示的ASCII值来指定一个字符。这个字符C在十进制中是67,在十六进制中是43,因此我们可以像这样使用转义序列来往页面中进行写入它:
document.write( "/x43" );
这个转义序列 /uDDDD 和它的工作原理大致相同,但它是用Unicode字符编码方法。Unicode字符编码方法拥有65535个字符。 在前面的一二百个ASCII编码和Unicode编码中字符集是相似的,你往页面中写入字符C可以使用如下的方式:
document.write( '/u0043' );
你可以获得ASCII和Unicode的详细信息,最好的查找信息的地方就是网络。对于Unicode, 可以试一下 http://www.unicode.org。