JavaScript之对象基础
现实世界是由无数的事物或对象组成,事物都有各独特的属性和一些动作行为,一般我们可以通过事物的某些特征或行为动作描述它。JavaScript中也是如此,JavaScript对象是多个键值对的集合,键我们称之为对象的属性,值称之为属性值。如果某个属性的值是函数,那么我们称这个属性是该对象的一个方法。
一 JavaScript对象分类
JS中对象大致可以分为3大类
1、 本地对象
这类对象是独立于宿主环境的对象,不因宿主环境的改变而有任何不同,它们由ECMAScript(JavaScript核心)提供并维护。
Object
我们称他为原始对象,JS中其他的本地对象都继承自他,他是所有对象的祖先,他的所有方法和属性都会出现在其他对象中。
Function
函数其实是功能完整的对象,他也有自己的属性和方法,我们使用function关键字定义的所有函数都属于该类。
Array
数组对象比较特别,因为它的键是从0开始的数字。并且是用中括号“[]”包裹的。
String
文本(字符串)对象。
Boolean
布尔对象。
Number
数字对象。
Date
时间对象。
RegExp
正则表达式对象。
Error:EvalError( 全局eval()
功能错误 ),RangeError( 值范围错误 ),ReferenceError( 引用错误 ),SyntaxError( 语法错误 ),TypeError( 值类型错误 )
各种错误对象。这里不必深究这些对象,只需要知道有这些东西,调试的时候查询文档即可。
注意,我们自定义的对象绝大部分最终都继承自 Object,所以它们也属于此范畴。
2、 内置对象
内置对象也是独立于宿主环境的,但它只有在程序被执行之前才出现。
Global
全局对象是预定义的对象,作为JavaScript的全局函数和全局变量的占位符,全局对象只是一个对象,而不是一个类,既没有构造函数也无法被实例化。
学习基础知识阶段,大家不必详细了解构造函数相关知识,这里的重点是知道有Global这么一个对象即可。
了解详情请移步W3school。
Math
Math对象和Global一样,没有构造函数,也不能使用new实例化。它是专门用于执行数学计算的数学函数和数学常量的集合。
3、 宿主对象
所有由宿主实现的对象都属于该类,JavaScript中的宿主对象是Web对象,所有DOM和BOM对象都是宿主对象。关于它们,以后会专门讲解。
4,另一种分类
内置对象(上面的本地对象),宿主对象(同上),自定义对象(所有实例对象)。
二 JavaScript对象的创建
JavaScript中创建对象有4种常用方式:
1、 字面量方式
1 var obj = { 2 name:"ren", 3 age:12, 4 say:function(){ 5 alert("hello,my name is " + this.name); 6 } 7 };
2、 Object()方式
1 var obj = new Object(); 2 obj.name = "ren"; 3 obj.age = 12; 4 obj.say = function(){ 5 alert("hello,my name is " + this.name); 6 }
3、 构造函数方式
1 function CreateObj(){ 2 this.name = name; 3 this.age = age; 4 this.say = function(){ 5 alert("hello,my name is " + this.age); 6 }; 7 } 8 var obj = new CreateObj();
4、Object.create()
1 var proto = {name:'ren'}; 2 var obj = Object.create(proto); 3 //proto将成为obj对象的原型,原型相关的知识将在以后详细介绍
三 对象使用
1, 使用对象的属性
1 var obj = { 2 name:"ren", 3 age:12, 4 say:function(){ 5 alert("hello,my name is " + this.name); 6 } 7 }; 8 9 console.log(obj.name);//"ren" 10 console.log(obj["name"]);//"ren"
2,使用对象的方法
接上面的obj使用
1 obj.say();//"hello,my name is ren" 2 obj.say;//ƒ (){alert("hello,my name is " + this.name);} 3 //不带(),将返回函数的定义
3,获取对象的属性
使用 keys() 方法获取对象的属性:
1 Object.keys(obj); //['name','age','say']
2 var arr = [1,2,3];
3 Object.keys(arr); //['0','1','2']
4,删除对象的属性或方法
删除对象的属性或方法使用关键字:delete,返回true表示删除成功,false表示删除失败
1 var obj = { 2 name:"ren", 3 age:12, 4 say:function(){ 5 alert(this.name); 6 } 7 }; 8 delete obj.name;//true 9 console.log(obj);//{age:12,say:function(){alert(this.name);}}
5,冻结对象
很多时候,我们创建一个对象之后不希望它再被任何人以任何方式修改,这时候你可以使用Object.freeze()方法冻结它。
1 var obj = {name:'ren'}; 2 Object.freeze(obj); 3 obj.name = 'ner';//'ner' 4 obj.age = 12;//'12' 5 console.log(obj);//{name:'ren'}
6,遍历对象
遍历对象通过:for...in;
1 for(var item in obj){ 2 console.log(obj[item]); 3 } 4 // 'ren','12',fn