对象的属性(三个特性)

 对象基础

一. javascript的数据类型:  对象类型(复杂数据类型)  String类型(字符串类型) Number类型(数字类型) 
                          Boolean(布尔类型)  Undefined(未定义类型) Null(空型)

二. 对象
    1. 对象的概念: 对象是一组原始数据类型或引用类型(方法)的序列, 这个数列是以键值对的形式存储,序列中的每一项 被称之为属性或方法(行为),且每一个属性名必须是唯一的.
       对象的用途: 开发人员会经常使用到对象数据类型,对象数据类型用来存储数据或是创建自定义函数
    
    2. 创建一个简单的对象
       var person = {
           name:"Tom",
           age : 20,
           30 : 10,
           sayname:function(){
               console.log("I'm" + this.name); 
           }
       } 
       取值:
       console.log(person.name); //返回Tom; 获取name这个属性的值
       console.log(person["30"]); //返回10; 获取30这个属性的值

    3. 属性名可以是字符串或数字,如果属性名是数字,那么在调用时(取值),需用[]中括号,里面加""双引号来取值
        var person = {
           10:15
           30:35,
           sayname:function(){
               console.log("I'm" + this["10"]); 
           }
       } 
       取值:
       console.log(person["10"]); //返回15; 获取"10"这个属性的值
       console.log(person["30"]); //返回10; 获取"30"这个属性的值

    4. 原始数据类型 和 引用数据类型
       1. 原始数据类型是以值的形式直接将值存储到变量里(自我理解:每个变量都被分配了不同的内存区域):
          例: var person = "Tom";
              var other = person;
              person = "Nicy";
              console.log(person); //返回 "Nicy"
              console.log(other); //返回"Tom";
          由上看出: 即使把person的值修改后,other的值还是以前存储的那个值.

       2. 引用数据类型是将一个地址值(该对象属性的地址)存储到变量里,这个变量指向的是这个对象属性的内存空间:
          例: var person = {name:"Tom"};
              var other = person;
              person.name = "Nicy";
              console.log(person.name); //返回 "Nicy"
              console.log(other.name);  //返回 "Nicy"
          解释: person/other 这两个变量都存储的是{name:"Tom"}这个对象属性的存储空间,即
               指向的都是同一块内存区域,这块内存区域存储了一个匿名对象,其有着name的属性.

       
三. 对象数据类型的属性所具有的特性

    对象数据类型: 每个数据属性除了具有键值对的特性外,还有其他三个特性(这三个特性的初始值都为true).
    为一个对象添加属性的写法: Object.definProperty(person,"name",{
                                configurable:true,  //设置person这个对象的name属性的值为可修改的
                                value:"Tom"
                           });
    注意: 设置属性时,里面的语句用,逗号隔开,最后一条语句的后面不写逗号;Object的小括号后要有;分号
   
    1.  可配置性(configurable):指明该属性是否可被删除 ; (设置为true,可被删除; 设置为false,不可被删除;),
   删除属性(比如name属性)的写法: delete person.name
    
        例:  Object.definProperty(person,"name",{
                  configurable:true,  //设置person这个对象的name属性可被删除
                  value:"Tom"
            });
            console(person.name);//输出"Tom"
            delete person.name;  //因为configurable被设置为true,代表name属性可被删除,
                                   这里调用了delete删除方法,故name这个属性被删除了.

            console(person.name);//因为上一句已把name属性删除,此时person里没有name这个属性了,故不再打印.

   
    2. 枚举性(enumerable): 指明该属性能否在for/in中被遍历到;(设置为true,该属性可被遍历到,并被返回;
   设置为false,该属性不能被遍历到,即被隐藏起来了), for/in的写法:
   for(var X in person){ console.log(x + ":" + person[x]);} ---- 这个for/in就相当于以前学习的for循环,X是被遍历到的person这个对象的各个属性,若要返回属性的值,写法为person[X].
      
      例:  Object.definProperty(person,"name",{
                  enumerable:true, //设置person这个对象的name属性可在for/in中返回
                  value:"Tom"
            });
        
            Object.definProperty(person,"age",{
                  enumerable:false,  //设置person这个对象的age属性不能再for/in中被返回(将age属性隐藏起来了)   
                  value:20
            });
   
            for(var X in person){
               console.log(X + ":" + person[X]);
            }
           for/in 的 输出结果为: name:"Tom"
           因为age属性的enumerable的值设置为false,表示在for/in里不能返回age,即把age属性隐藏起来.

     
    3. 可写性(writable): 指明该属性能否被修改; (设置为true,该属性的值可被修改;设置为false,该属性的值不可被修改)
       
       例: Object.definProperty(person,"name",{
                  writable:true, //设置person这个对象的name属性的值可被修改
                  value:"Tom"
            });

           Object.definProperty(person,"age",{
                  writable:false, //设置person这个对象的age属性的值不可被修改
                  value:20
            });

            person.name = "Nicy";
            person.age = 30;
            console.log(person.name); //返回"Nicy",name属性的值修改成功
            console.log(person.age);  //返回20, age属性的值还是原值,没被修改掉
          
            说明: name属性的writable设置的为true,故name属性的值可被修改;
                  age属性的writable设置的为false,故age属性的值不可悲修改.
       
   
        
        

posted @ 2015-09-18 23:16  Hrbacity  阅读(2007)  评论(0编辑  收藏  举报