在JavaScript中,几乎所有事物都是对象。布尔是对象(如果用new关键词定义)数字是对象(如果用new关键词定义)字符串是对象(如果用new关键词定义)日期永远都是对象算术永远都是对象正则表达式永远都是对象数组永远都是对象函数永远都是对象对象永远都是对象 所有JavaScript值,除了原始值,都是对象。原始值指的是没有属性或方法的值。原始数据类型指的是拥有原始值的数据。 JavaScript定义了5种原始数据类型:stringnumberbooleannullundefined 原始值是一成不变的(它们是硬编码的,因此不能改变)。 假设x3。14,您能够改变x的值。但是您无法改变3。14的值。1内置对象varx1newObject();一个新的Object对象varstrnewString(你好!迈克!);一个新的String对象varx3newNumber(456);一个新的Number对象varx4newBoolean(true);一个新的Boolean对象vararrnewArray(3);一个新的Array对象varregnewRegExp(javascript,i);一个新的RegExp对象varx7newFunction();一个新的Function对象varrightnownewDate();一个新的Date对象 JavaScript提供原始数据类型字符串、数字和布尔的对象版本,所以并无理由创建复杂的对象,原始值快得多!请使用对象字面量{}代替newObject()。请使用字符串字面量代替newString()。请使用数值字面量代替Number()。请使用布尔字面量代替newBoolean()。请使用数组字面量〔〕代替newArray()。请使用模式字面量代替newRexExp()。请使用函数表达式(){}代替newFunction()。 实例:varx1{};新对象varx2;新的原始字符串varx30;新的原始数值varx4新的原始逻辑值varx5〔〕;新的数组对象varx6()新的正则表达式对象varx7function(){};新的函数对象2自定义对象 2。1直接以名称:值的对象字面量来创建单一对象 对象是包含变量的变量。值按照名称:值对的形式编写(名称和值以冒号分隔)。varperson{firstName:Bill,lastName:Gates,id:678,fullName:function(){returnthis。firstNamethis。lastN}}; 2。2使用newobject关键字构造单一对象,并可动态地给对象添加属性和方法varcarnewObject();car。nameBenz600;car。car。capacity2。0;car。runcanRfunctioncanRun(){document。write( Themostspeed250km);}car。runfunction{}document。write(car。name);car。run(); 以上创建单一对象的方法可以动态新增、更新、delete属性。 2。3使用function关键字构造对象类型或蓝图(构造函数或对象构造器)functionCar(name,color,capacity){this。this。this。this。runfunction(){}}varcarnewCar(Benz600,color,2。0);car。run(); 无法为已有的对象构造器添加新属性。如需向构造器添加一个新属性,则必须把它添加到构造器函数。但所有JavaScript对象都从原型继承属性和方法。 日期对象继承自Date。prototype。数组对象继承自Array。prototype。Car对象继承自Car。prototype。 Object。prototype位于原型继承链的顶端: 日期对象、数组对象和Car对象都继承自Object。prototype。Car。prototype。price4500003通过函数Object。create()来创建对象 另外,在ECMAScript5中,也可以通过函数Object。create()来创建对象。 Object。create(prototype,descriptors) 实例:【示例1】下面示例使用Object。create定义一个对象,继承null,包含两个可枚举的属性size和shape,属性值分别为large和round。varnewObjObject。create(null,{size:{属性名value:large,属性值enumerable:true可以枚举},shape:{属性名value:round,属性值enumerable:true可以枚举}});console。log(newObj。size);largeconsole。log(newObj。shape);roundconsole。log(Object。getPrototypeOf(newObj));null【示例2】下面示例使用Object。create定义一个与对象直接量具有相同原型的对象。varobjObject。create(Object。prototype,{继承Object。prototype原型对象x:{value:undefined,属性值writable:true,可写configurable:true,可以配置enumerable:true可以枚举}});console。log(obj。prototypeObject。getPrototypeOf(obj));Objprototype〔objectObject〕【示例3】下面示例定义一个对象,使用访问器属性b来读写数据属性a。varobjObject。create(Object。prototype,{a:{数据属性awritable:true,value:a},b:{访问器属性bget:function(){returnthis。a;},set:function(value){this。}}});console。log(obj。a);aconsole。log(obj。b);aobj。b20;console。log(obj。b);204函数也是一个对象 4。1函数声明functionmyFunction(a,b){} 4。2通过名为Function()的内建JavaScript函数构造器来定义varmyFunctionnewFunction(a,b,returnab);varxmyFunction(4,3); 您实际上无需使用函数构造器。可以将一个函数表达式(匿名函数)赋值给一个变量(函数名用变量名来表示)。在变量中保存函数表达式之后,此变量可用作函数。varmyFunctionfunction(a,b){returnab};varxmyFunction(4,3); 上面的函数使用分号结尾,因为它是可执行语句的一部分。 JavaScript函数能够在声明之前被调用,称为函数提升:myFunction(5);functionmyFunction(y){} 使用表达式定义的函数不会被提升。 JavaScript函数因为是对象,都有属性和方法。 arguments。length会返回函数被调用时收到的参数数目:functionmyFunction(a,b){returnarguments。} End