ECMAScript
是一种由Ecma国际通过ECMA-262标准化的脚本程序设计语言,它往往被称为JavaScript
或JScript
,但实际上后两者是ECMA-262标准的实现和扩展。
ECMAScript对象
定义为“属性的无序集合,每个属性存放一个原始值、对象或函数”
- 对象由特性
attribute
构成,特性可以是原始值,也可以是引用值。如果特性存放的是函数,它将被看作对象的方法method
,否则该特性被看作对象的属性property
。 ECMAScript
中的所有对象的所有属性和方法都是公用的。
ECMAScript对象类型
- 本地对象:独立于宿主环境的
ECMAScript
实现提供的对象,即引用类型。 - 内置对象:由
ECMAScript
实现提供的、独立于宿主环境的所有对象,在ECMAScript
程序开始执行时出现的,即Global
和Math
,每个内置对象都是本地对象。 - 宿主对象:所有非本地对象都是宿主对象
host object
,即由ECMAScript
实现的宿主环境提供的对象。所有BOM
和DOM
对象都是宿主对象。
JavaScript创建对象
//混合构造函数和原型方式
function Person(name,age){
//构造函数中定义的属性,这些属性每次创建对象都会被创建一次
this.name=name;
this.age=age;
this.friends=new Array("Mike","John");
}
Person.prototype.showFriends=function(){
//原型方式中定义的属性,这些属性只会被创建一次,
alert(this.friends);
}
//动态原型
function Person(name,age){
this.name=name;
this.age=age;
this.friends=new Array("Mike","John");
if(typeof Car._initialized==="undefined"){
Car.prototype.showFriends=function(){
alert(this.friends);
}
}
Car._initialized=true;
}
数据类型type
- 原始类型
primitive type
Number
:不区分整数和浮点数。String
:以单引号’或双引号”括起来的任意文本。Boolean
:只有true
、false
两种值。Null
:只有一个专用值null
。Undefined
:只有一个值,即undefined
。当声明的变量未初始化时,该变量的默认值是undefined
。
- 引用类型(本地对象)
Object
,Function
,Array
,…String
,Boolean
,Number
,Date
,RegExp
,…Error
,EvalError
,RangeError
,ReferenceError
,SyntaxError
,TypeError
,URIError
,…
函数Function
**ECMAScript的函数实际上是功能完整的对象。
函数名只是指向该函数对象的引用值(地址)。
尽管可以使用Function
构造函数创建函数,但最好不要使用它,因为用它定义函数比用传统方式要慢得多。不过,所有函数都应看作Function
的实例。**
//用Function类直接创建函数
var function_name = new function(arg1, arg2, ..., argN, function_body);
//等价于直接定义函数
function function_name(arg1, arg2,...,){//这些参数必须是字符串
function_body;
}
闭包
指的是词法表示包括不被计算的变量的函数,也就是说,函数可以使用函数之外定义的变量。
var sMessage = "hello world";
function sayHelloWorld() {
//sayHelloWorld()函数根本不接受参数,它使用的值是从执行环境中获取的。
alert(sMessage);
}
sayHelloWorld();
该脚本被载入内存后,并没有为函数sayHelloWorld()
计算变量 sMessage
的值。该函数捕获sMessage
的值只是为了以后的使用,也就是说,解释程序知道在调用该函数时要检查sMessage
的值。sMessage
将在函数调用sayHelloWorld()
时(最后一行)被赋值,显示消息"hello world"
。