字面量
•
在编程语言中,字面量是一种表示值的记法。例如,
“Hello, World!”
在许多语言中都表示一个字符串字面量(
string literal
),
JavaScript
也不例外。以下也是
JavaScript
字面量的例子,如
5
、
true
、
false
和
null
,它们分别表示一个整数、两个布尔值和一个空对象。
JavaScript
还支持对象和数组字面量,允许使用一种简洁而可读的记法来创建数组和对象。考虑以下语句,其中创建了一个包含两个属性的对象(
firstName
和
lastName
)
:
•
Var
customer=new object();
•
customer.firstname
=‘
jhon
’;
•
Customer.lastname
=‘doe’;
•
还可以使用一种等价的方法创建同样的对象:
Var
customer={
customer.firstname
=‘
jhon’,Customer.lastname
=‘doe’;};
•
以上赋值语句的右边是一个对象字面量(
object literal
)。对象字面量是一个名值对列表,每个名值对之间用逗号分隔,并用一个大括号括起。各名值对表示对象的一个属性,名和值这两部分之间用一个冒号分隔。要创建一个数组,可以创建
Array
对象的一个实例:
•
Var
somePrimes
=new Array();
somePrimes.Push
=(1,2,3,4);
•
不过首选的方法是使用一个数组字面量(
array literal
),这是一个用逗号分隔的值列表,用中括号括起:
Var
somePrimes
=[1,2,3,4,5,6,7]
•
前面的例子展示了对象和数组字面量中可以包含其他字面量。以下是一个更复杂的示例:
•
Var
team=(
•
Name:’’,
•
Mumbers
:[ ];
•
count:function
() {return
Mumbers.Length
}
•
)
•
赋给
team
变量的对象有
3
个属性:
name
、
members
和
count
。注意,
''
表示空串,
[]
是一个空数组。甚至
count
属性的值也是一个字面量,即函数字面量(
function literal
):
函数字面量如下构造:前面是一个
function
关键字,后面是一个函数名(可选)和参数表。然后是函数体,包围在大括号中。
•
以上已经介绍了字面量,下面来介绍
JavaScript
对象记法(
JavaScript Object Notation
,
JSON
),这是一种用于描述文件和数组的记法,由
JavaScript
字面量的一个子集组成。
JSON
在
Ajax
开发人员中越来越流行,因为这种格式可以用于交换数据,通常取代了
XML
。
•
使用
JSON
•
JSON
是一种用于数据交换的文本格式。其作用是提供结构化数据的一种表示,而不依赖于所用的语言和平台。使用这种格式,可以在不同语言编写的应用程序之间交换数据,而且可以在不同机器上运行应用程序。与
XML
相比(这可能是最著名的数据交换格式),
JSON
的语法很简洁。这说明,通过网络传输
JSON
数据通常需要更少的带宽。
•
JSON
建立在
JavaScript
语言的一个子集的基础上。因此,其编码和解析很直接。由于绝大多数
Ajax
开发人员同时也是
JavaScript
开发人员,所以
JSON
几乎没有什么学习曲线。
JSON
结构
•
JSON
的基础包括两个结构:一个名值对集合,称为对象(
object
),以及一个有序的值列表,称为数组(
array
)。在
JSON
中,值(
value
)可以是以下某种形式:
•
对象
•
数组
•
数字
•
串
•
true
•
false
•
null
•
对象表示为
JavaScript
对象字面量,数组表示为
JavaScript
数组字面量,余下的值也由相应的字面量表示。
•
由于
JSON
是
JavaScript
字面量的一个子集,语法方面存在一些限制。在一个
JSON
对象中,名值对中的名部分必须是一个字符串,而值部分必须是得到支持的某种值。以下是一个对象的
JSON
表示,该对象包含两个属性:
•
{“
firstname
”:”
jhon
”; “
lastname
”:”doe”};
•
属性名(
firstName
和
lastName
)必须是串,而且必须包围在双引号中。下面的代码表示了一个类似的对象,将前面的代码与之做一个比较:
{
firstname
:”
jhon
”;
lastname
:”doe”};
•
在
JavaScript
中,这两个对象有相同的结构。不过,第二个对象不是一个合法的
JSON
表示,因为属性名没有包围在双引号中。
•
JSON
数组也存在一些限制,数组中的元素必须是得到支持的值。例如,
Date
对象不在支持的值之列,所以不能作为
JSON
数组的元素或
JSON
对象的一个属性。
String
与
JavaScript
字符串字面量有相同的表示,不过串必须用双引号包围。
Number
类似于
JavaScript
数字字面量,不过八进制和十六进制格式未得到支持。下面是一个
JSON
数组的例子:
[1,2,3,4,5,5]
•
布尔值(
true
和
false
)和
null
与相应的
JavaScript
字面量有相同的表示。
•
说明 方法不能使用
JSON
表示,因为
JSON
语法中不包括函数字面量。另外,
JavaScript
的
new
操作符也不是
JSON
语法的一部分,不能在对象或数组中使用。
•
JSON
的优点之一是它易于解析。已经为许多语言编写了很多
JSON
解析器,它们可以自动完成
JSON
的生成和解析。(在
JSON
官方网站上可以找到这些解析器的一个列表,见
http://json.org
)在
JavaScript
中,解析过程相当直接,所要做的只是将
JSON
串传递给
JavaScript
eval
函数。如果有一个包含
JSON
数据的
jsonString
变量,以下代码将解析这个变量,并返回相应的
JavaScript
对象:
var
aa
=
eval
(‘(‘+
jsonstring
+’)’);
•
注意,在调用
eval
之前要把
JSON
数据用括号括起。这样就要求
eval
将参数看作为一个表达式,而不会把对象字面量
{}
解释为一个代码块。不过
eval
函数可以执行任意的代码,如果数据来自一个不可信的来源,可能会导致安全问题。出于这个原因,一般建议在调用
eval
函数之前先验证
JSON
数据
前言
•
概述
•
JavaScript:
关键字:解释性语言,客户端工作,浏览器
随着ajax技术的出现,JavaScript变得日益重要.目前比较优秀的框架有Ext,jquery。
目录
•
数据类型
•
类型转换
•
变量
•
运算符
•
语句
•
对象
•
数组
数据类型
基本数据类型和复合数据类型
•
数字
整型、浮点
科学计数法 数字e|E[+,-]整型数字
•
字符串
•
布尔值
•
函数
•
对象
内置对象Date,Error,RegEx
类型转换
•
数字到字符串
可以与空字符串进行’+’操作
也可以使用内置的toString()方法
•
字符串到数字
进行’-’操作。- 0
Number()构造。相对非常严格,忽略开始和结尾处的空白字符,中间部分不能出现非数字。
转换函数parseInt,parseFloat。忽略开始处的空白字符,尽可能多的匹配。
•
布尔值与数字、字符串的转换
数字:零,false;非零数字,true。
字符串:空,false;非空字符串,true
任何对象true;null,false
true,1.false,0.或者字符串'true','false'
变量
•
没有类型,一个变量可以多次声明,可以存放任何类型的数据。
•
如果没有使用声明符
var
,
将创建全局变量。没有块级作用域。在函数体中的变量将覆盖函数外的变量,即使没有执行。
•
基本类型和引用类型
运算符
•
算数运算符
+、-、*、/、++、--、%
•
位运算符
>>、<<
•
赋值运算符
=、+=、-=、/=、操作符后连接’=‘
•
相等运算符
==、===
•
关系运算符
>、<、in、instanceof
对象
•
创建对象
对象直接量。var o={x:1,y:1}。
创建已定义的对象,使用该对象的构造函数。new ClassName()
属性的访问:
o.AttributeName
属性的枚举
for(var name in o)
检测属性是否存在
通过in来检测。'x' in o
o.x!=undefined
删除属性
delete
排除非继承的属性
hasOwnProperty
对象属性是无序集合,有区分与数组
•
d
数组
•
不支持多维数组,但是元素可以为数组,从而实现多维数组。不是连续的。
•
访问数组元素
下标法。O[index]
•
遍历数组
下标法:for(var i=0;i<a.length;i++)
•
数组方法
push 和pop在数组尾部进行插入和删除数组元素
shift和unshift在数组的头部进行插入和删除数组元素
join将数组元素连接成字符串,可以指定分隔符。与split相逆。支持递归
reverse倒序
sort排序
concat将数组合并。不支持递归
a
函数
•
定义
function name(a/*parameter list*/){}
function 关键字 函数名称 (参数){函数体}
•
Arguments
对象
在函数体中,访问实际传递给函数的参数。类似于数组,但不同于数组,没有数组基本的方法。
•
Callee
arguments对象的属性,用来引用当前正在执行的函数本身,多用于匿名函数访问自身。
•
d
类
•
javascript
本身并不存在类。可以把定义单个对象的相关函数看作一个类定义。
构造函数 function functionName(paralist){
/*code*/}
类属性的定义
通过关键字this来实现,this引用的当前对象。但不一定是类对象本身。function 自身的call和apply可以传递this。
eg.
function Rect(x,y){
this.x=x;
this.y=y;
}
方法
用来计算不同对象,通过对象自身的数据来计算,本身不会存储数据。通过原型来定义各个实例都可以访问的属性。
Rect.protetype.area=function(){return this.x*this.y};
prototype本身是一个对象,因此实际上为对象实现了一个方法。通过prototype实现了继承
定义对象的实例属性
通过this.attributename或者classname.prototype.attributename
非实例属性classname.attributename
属性访问
•
由于实现了继承,属性的寻找,先在对象自身寻找,如果没有找到则从它继承的对象去寻找。
•
继承关系实现了一个链,不能形成闭链。
•
访问被掩藏的属性时,可以通过被继承对象来访问。而被继承对象通过
prototype
来访问。
•
只读属性
•
通过
return
来实现
,
从而避免写操作。
function
Rect
(
x,y
){
•
this.x
=function(){return x};
•
this.y
=function(){return y}
•
}
判断对象类型
•
typeof
返回值 类型:字符串,简单数据类型,object,number,boolean,string
•
instanceof
检查对象类型
通过实现该对象的构造函数进行监测
正则表达式
•
Pattern
和
c#
中的正则语法一样。
Pattern
在
//
中。
/pattern/