JavaScript类型·对象·函数
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 typeNumber:不区分整数和浮点数。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"。

浙公网安备 33010602011771号