JavaScript基础学习(四)—Object
一、Object的基本操作
1.对象的创建
在JavaScript中,创建对象的方式有两种:构造函数和对象字面量。
(1)构造函数
var person = new Object(); person.name = "Tom"; person.age = 22; person.say = function(){ alert("Hello"); }
(2)对象字面量
var person = { name : "Tom", age : 22 }
2.对象属性和方法的删除
可以使用delete操作符。
var person = {}; person.name = "Tom"; person.age = 20; person.say = function(){ alert("Hello!!!"); } //delete操作符删除对象的属性和方法 delete person.name; delete person.say; alert(person.age); //20 alert(person.name); //undefined alert(person.say); //undefined
3.对象的遍历
可以使用for in枚举遍历。
var person = {}; person.name = "Tom"; person.age = 20; person.say = function(){ alert("Hello!!!"); } //遍历对象 for(var attr in person){ alert(attr + " = " + person[attr]); }
二、Object的属性和方法
1.constructor属性
constructor属性是保存当前对象的构造函数,前面的例子中,constructor保存的就是Object方法。
var person = {}; person.name = "Tom"; person.age = 20; person.say = function(){ alert("Hello!!!"); } /* * constructor: 保存对象的创建函数 * function Object() { * [native code] * } */ alert(person.constructor)
2.hasOwnProperty(propertyName)方法
hasOwnProperty()方法接收一个字符串参数,该参数表示属性名称,用来判断该属性是否在当前对象实例中,而不是在对象的原型链中。
var person = {}; person.name = "Tom"; person.age = 20; person.say = function(){ alert("Hello!!!"); } //hasOwnProperty(propertyName): 用于检测给定的属性在当前对象实例中是否存在。 alert(person.hasOwnProperty("name"));//true alert(person.hasOwnProperty("age")); //true alert(person.hasOwnProperty("birth")); //false
3.isPrototypeOf(Object)方法
isPrototype()方法接收一个对象,用来判断当前对象是否在传入的参数对象的原型链上,说起来有点抽象,我们来看看代码。
function MyObject(){ } var obj = new MyObject(); alert(Object.prototype.isPrototypeOf(obj));//true
我们知道MyObject是继承自Object对象的,而在JS中,继承是通过prototype来实现的,所以Object的prototype必定在MyObject对象实例的原型链上。
4.propertyIsEnumerable(prototypeName)方法
prototypeIsEnumerable用来判断给定的属性是否可以被for..in语句给枚举出来。obj的属性还有很多,比如constructor,比如hasOwnPrototype等等,但是它们没有被输出,说明这些属性不能被for…in给枚举出来,可以通过propertyIsEnumerable方法来得到。
var person = {}; person.name = "Tom"; person.age = 20; person.say = function(){ alert("Hello!!!"); } alert(person.propertyIsEnumerable("name")) //true alert(person.propertyIsEnumerable("age")) //true alert(person.propertyIsEnumerable("constructor")) //false
5.toLocalString()方法
toLocalString方法返回对象的字符串表示,和代码的执行环境有关。
var obj = {}; alert(obj.toLocaleString());//[object Object] var date = new Date(); alert(date.toLocaleString());// 2016/4/27 上午11:47:35
6.toString()方法
toString用来返回对象的字符串表示。
var obj = {}; alert(obj.toString());//[object Object] var date = new Date(); alert(date.toString());// Wed Apr 27 2016 11:50:57 GMT+0800
7.valueOf()方法
返回对象的原始值,可能是字符串、数值或布尔类型。
三、Object的简单应用
1.模拟Java中的Map
function Map(){ var obj = {}; //put方法 this.put = function(key,value){ //把键值对绑定的obj对象上 obj[key] = value; } //size(): 获取map个数 this.size = function(){ var count = 0; for(var attr in obj){ count++; } return count; } //get():根据key获得value this.get = function(key){ if(obj[key] || obj[key] === 0 || obj[key] ===false){ return obj[key]; } else{ return null; } } //remove():移除元素 this.remove = function(key){ if(obj[key] || obj[key] === 0 || obj[key] ===false){ delete obj[key]; } } //eacbhMap遍历Map的方法 this.eachMap = function(fn){ for(var attr in obj){ fn(attr,obj[attr]); } } } //模拟Java中的Map var map = new Map(); map.put("01","abc"); map.put("02",0); map.put("03",true); map.put("04",new Date()); alert(map.size()); //4 alert(map.get("02")); //0 map.eachMap(function(key,value){ alert(key + " = " + value); });
越努力,越幸运!