zoukankan      html  css  js  c++  java
  • javascript 对象实例

    创建对象:

    var o = new Objct();   //创建一个空对象
    var o = {};
    
    var a = new Array();  //创建一个空数组
    var a = [];
    
    var d = new Date();  //创建一个表示当前时间的日期对象

    对象属性的设置:

    book.edition = 6             //给book创建一个edition的属性
    book[ "mainTile" ] = "ECMASript"    //给mainTile属性赋值
    book[i] = param; //如果有多个属性与值,可以使用这种方法,只要将i与param传回来,就可以给book这个数组设置多个属性与值

    如果一个对象的属性我是保留字,必须使用 [] 的形式访问他们: o["class"] / o["for"],使用方括号时,方括号内的表达式必须返回为字符串。

    作为关联数组的对象:

    Object["property"]     //方括号和一个数组,数组元素通过字符串索引。
    • 通过 . 访问对象时,属性名是一个标识符,这个标识符必须直接出现在js的代码中,比如接口的属性,因此程序无法修改它们
    • 通过 []  访问对象时,属性名是一个字符串,字符串是js的一个数据类型,可以通过程序修改和创建它们

    场景:由于在写程序时无法知道属性名称,因此无法通过 . 来访问对象的属性。但可以使用 [] ,因为它使用字符串值(字符串是可以更改的)而不是标识符(标识符是静态的,不可以更改的)作为索引对属性进行访问的。

    下面两个JS的表达式的值相同:

    Obj.property
    Obj["property"]

    当通过 [] 来访问对象的属性时,属性名通过字符串来表示。如果无法得知属性名称是什么的时候,可以使用  Obj ["属性名称"] = value,这个属性名称是动态的,可以在运行时更改

    场景:如果访问对象的属性时,而没有这个属性,会报错,那么怎么避免这种没有属性的错误呢?

    var len = book && book.sub && book.sub.length;

    属性的操作:

    删除:  delete

    delete book.str;           //删除book的str属性
    delete book["srt"];        //删除book的str属性

    判断某个属性是否存在于某个对象中,使用 in 运算符:左侧为属性(字符串),右侧为对象,in 可以区分不存在的属性存在但值为undefined的属性

    var o = {x:1,w}

    "x" in o; //true,存在的属性

    "y" in o; //false,不存在的属性

    "w" in o //false,  存在的属性,但值为undefined

    如何遍历对象的属性,使用 for / in  ,它可以遍历所有的属性,包括自有属性和继承属性。

    用来枚举属性的对象工具类函数

    function extend(o,p){                //两个对象参数
      for(str in p){                     //遍历p中的所有属性
            o[str] = p[str];             //将属性添加到o中
        }  
        return o;                        // 返回 o 对象
    }

    增强版的枚举属性的对象工具类函数

    /*将p中可枚举的属性复制至o中,并返回o
    * 如果 o与p 中有同名的属性,o 中的属性不受影响 
    * 这个函数并不处理getter 和 setter 以及复制属性
    */
    
    function extend(o,p){        //两个对象参数
       for (prop in p){               //遍历p中的所有属性
            if(o.hasOwnProperty[prop]) continue;          //过滤已经在o中存在的属性
            o[prop] = p[prop];    //将属性添加至o中
        }  
        return o;    //返回o
    }

     检测属性是否为undefined:使用 !== 进行判断,    “!==”可以区分undefined 和 null

    var o = {x : 1}
    
    o.x !== undefined;           //true, o中有x这个属性
    o.y !== undefined;           //false,o中没有y这个属性

    返回一个数组,这个数组包含 o 中可枚举的自有属性的名称

    function keys(o){
      if( typeof o  !== "object") throw TypeError();   //参数必须是对象
      var result = [];          //将要返回的数组
      for(var prop in o){      //遍历可枚举的属性
         if (o.hasOwnProperty(prop))    //判断是否是自有属性
         result.push(prop);            //将属性名添加至数组中
      }  
      return result;           //返回这个数组
    }

     如何删除属性? delete ,只能删除自有属性,不能删除继承属性

    delete book.name;

    delete book['name'];

    • 以下是一些实用的枚举属性的方法:
    for(p in o){
      if( !o.hasOwnProperty(p) )  continue;       //跳过继承的属性 
    }
    
    for( p in o){
      if(typeof o[p] === 'function') continue;      //跳过方法  
    }
    function extend(o,p){    //把p中可枚举的属性复制到o中
      for(prop in p){            //遍历p中所有属性
        o[prop] = p[prop];    //将属性添加至o 中
      }  
      return o;                    //返回 o
    }
    
    

    判断某个属性是否为该对象的自有属性,对于继承属性则返回 false.

    hasOwnProperty()     这个方法用来检测给定的名字是否是对象的自有属性



    function
    merge(o, p){ for (prop in p){ //遍历p中所有属性 if (o.hasOwnProperty [prop]) continue; //过滤掉已经存在o中的属性 o [prop] = p [prop]; //将属性添加到 o 中 } return o; //返回 o }
    function delp(o, p){
      for (prop in o) {         //遍历o中所有的属性
         if (! (prop in p)  delete o[prop]);   //如果p不存在,则删除p
       }
      return o;   //返回o
    }
    function subtrac (o, p){
      for(prop in p) {             //遍历p中的属性
       delete o[prop]              //从o中删除这个属性
     }
     retrun o;
    }
    function oobj (o, p){
      return newObj (extend (extend ( {},o),p);  //返回一个新的对象,这个对象拥有 o 和 p的属性
    }
    hasOwnProperty()     这个方法用来检测给定的名字是否是对象的自有属性
    function
    keys(o){ if (typeof o !== 'object') throw TypeError(); //参数必须是对象 var result = []; //将要返回的数组 for( var prop in o ){ //遍历所有可枚举的属性 if (o.hasOwnProperty (prop)); //判断是否有自有属性 result.push(prop); //将属性名添加至数组中 } return result; }

     对象的三个属性:

    • 原型属性
    • 类属性
    • 可扩展性

    原型属性是在实例对象创建之初就设置好的,对象的原型属性是用来继承属性的,要想检测一个对象是否是另一个对象的原型,请使用 isPrototypeOf() = instanceof()  ,这两个方法的功能非常类似

    var p {x:1};                  //定义一个原型对象
    var o = Object.create(p);        //使用这个原型创建一个对象
    p.isPrototypeOf(o);         //true时,继承自p
    Object.  prototypeOf(o);            //true时,p继承自 Object.prototype

    对象的类属性是一个字符串,用以表示对象的类型信息。现在还没有提供这样的属性方法,只有一种间接的方式可以查询它:toString(),因此,要想获得对象的类,可以调用对象的toString方法,然后返回一个字符串,如何正确的使用类属性的toString方法:

    //一个公共的classOf函数,可以返回传递给它的任意对象的类,这个函数可以传入任意类型的参数,数字、字符串和布尔值都可以直接调用toString方法,就和对象调用toString方法一样
    
    function classof(o){
      if(o === null)  return "Null";
      if(o === undefined)  return "Undefined";
      return Object.prototype.toString.call(o).slice(8,-1);
    }

    对象的可扩展性用以表示是否可以给对象添加新属性。所有的内置对象和自定义对象都是可扩展的。

    ***********对象的序列化***********是指将对象的状态转换为字符串,也可将字符串还原为对象,这些数据都使用JSON作为数据交换格式,提供了如下方法进行转换:

    JSON.stringify(o);   //将一个对象解析为JSON字符串
    JSON.parse(str);    //从字符串中解析出JSON对象  
    var str = '{"name":"huangxiaojian","age":"23"}'
    
    JSON.parse(str);
    
    //结果为:
    //注意:单引号写在{}外,每个属性名都必须用双引号,否则会抛出异常。
    
    {
      age: "23"
      name: "huangxiaojian"
    }
    
    
    var a = {x:1,y:10}
    
    JSON.stringify(a)
    
    //结果为:
    
    "{"a":1,"y":10}"

    avascript 中可以动态添加 对象属性

    <html>
      <head>
        <script type="text/javascript">
            var obj = new Object();
            alert (obj.username);
            obj.username = "allen";
            alert (obj.username);
        </script>
      </head>
      <body>
      </body>
    </html>

    结果:
    依次打印出 undefined, allen

    也可用类似 EL (Expression Language)那样用“[]”表示。写成 obj["username"] = "allen";

    如何删除属性? 使用 delete

    <html>
      <head>
        <script type="text/javascript">
            var obj = new Object();
            obj["username"] = "allen";
            alert (obj.username);
            delete obj.username;
            alert (obj.username);
        </script>
      </head>
      <body>
      </body>
    </html>

    结果:依次打印 allen, undefined. 说明 username 属性已经删除。

    另外还有一种定义属性的方法,而且是我们必须掌握的:

    <html>
      <head>
        <script type="text/javascript">
            var obj = {username:"allen", password:"123"};
            alert(obj.username);
            alert(obj.password);
        </script>
      </head>
      <body>
      </body>
    </html>
  • 相关阅读:
    node.js创建服务,发送请求后返回数据
    node.js写入文件
    node.js读取文件
    elementUi的隐藏组件el-scrollbar滚动条
    [笔记]何为Linux及其文件系统(二)
    [笔记]何为Linux及其文件系统(一)
    [转文]简单理解数学、密码学、计算机、互联网、分布式数据库、区块链、分布式账本、密码货币
    [转文]Linux搭建最简单的邮件服务器
    [笔记]Why is UDP used for DNS instead of TCP?
    什么是IP地址、子网掩码、路由和网关?
  • 原文地址:https://www.cnblogs.com/baiyygynui/p/5724745.html
Copyright © 2011-2022 走看看