JavaScript基础学习,四—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);
                        });