Js———引用类型

来源:互联网 发布:xcode c语言编程教程 编辑:程序博客网 时间:2024/06/17 20:06
 引用类型是一种数据结构,将数据和功能组织在一起。
 
 Object类型:


 创建object实例的两种方法:
1. new 后面跟object构造函数(只为新对象定义了默认的属性和方法):
 var person=new Object();
      person.name=”Nicholes”; 
      
2. 字面量表示法:(冒号、逗号)
   var person={
      name : ” Nicholes”,
      age : 29
}
var person={};//和new Object() 相同;
person.name=”Nicholes”;


3. 访问对象属性时使用的方法:
   例: person.name
        person[“name”] :方括号可以通过变量来访问属性;


4. 添加、改变、删除 对象的属性和方法:
   person.name=””;
   delete person.name;
   销毁对象:对象=null;


Array类型:
1. 数组是无序列表;
2. 创建数组的方法:
     (1). 使用Array构造函数 :var colors=new Array();
                         var colors=new Array(20);
                         var colors=new Array(“red”,”blue”);
  
     (2). 使用数组字面量表示法:
             var colors=[“red”,”blue”];
             var colors=[];//创建一个空数组;
3. 读取和设置数组的值:
     使用索引下标:colors[ ];
4. 数组长度:
   colors.length;    //获取
   colors.length=5;  //设置
5. 向数组末尾添加新项:
   colors[colors.length]=”green”;
   colors.push(“ green”,”black ”);




一. 检测数组:
1. instanceof操作符:
例:[1,2] instanceof Array ===true;


if (value instanceof Array){
}
2. Array.isArray(value);
if(Array.isArray(value)){

}


二. 转换方法:
toLocalString();  toString();  valueOf();  join(“||”):可以设置分隔符;
如果数组中的某一项是null或undefined,则改值返回空字符串;
    
       三. 栈方法:
             栈:一种可以限制插入和删除项的数据结构,后入先出,栈中项的推入和弹出只发生在栈的顶部;
             push(): 接收参数,逐个添加到数组末尾,返回数组长度length;
                    例:push(“red”);
             pop():  从数组末尾移除最后一项,返回数组长度length;


       四. 队列方法:
             是一种先进先出的数据结构;
             shift(): 移除数组的第一项并返回该项,长度length减1;
             unshift(): 在数组前端添加任意个项并返回新数组长度;
                     例:unshift(“red”);


  
    五.重排序方法:
          reverse():反转数组的排列顺序;
          sort(): 无参数,按字符编码顺序排列数组项;
                有参数,使用比较函数:obj.sort(compare);


         //升序函数
         function compare(value1,value2){
     if(value1 < value2){
    return -1;
     }else if(value1 > value2){
    return 1;
 }else{
    return 0;
 }
  }
          //降序函数
  function compare1(value1,value2){
     if(value1 < value2){
    return 1;
     }else if(value1 > value2){
    return -1;
 }else{
    return 0;
 }
  }


        对于数值类型或者其valueOf() 方法会返回数值类型的对象类型:
         function compare(a,b){
           return a-b;
}
  
  六.操作方法:
       concat(): 连接数组,创建一个新数组;
       slice(): 从已有数组返回一个选定数组,两个参数(可负数),起始位置和结束位置;(结束位置小于起始位置会返回空数组)


       splice():(没有删除任何项,会返回空数组)
             删除:splice(0,2); 删除数组前两项;参数:起始位置,项数;
             插入:splice(2,0,”red”); 参数:起始位置,要删除的项,要插入的项;
             替换:splice(2,1,”red”); 参数:起始位置,要删除的项,要插入的项;
             
   七、位置方法:
          indexOf():从数组开头开始向后查找;
          lastIndexOf(): 从数组末尾开始向前查找;
          注意:
             都接收两个参数:要查找的项、起点位置的索引(可选);
             要求查找的项必须严格等于; 
             在没有找到的情况下返回-1;  
   八、迭代方法:
          每个方法接收两个参数:运行函数,运行函数的作用域对象(可选);
          函数会接收三个参数:数组项的值,该项在数组中的位置和数组对象
本身;function(item,index,array);


1查询符合某些条件的所有数组项:filter();
2对数组的每一项给定函数,每项都返回true,则为true。every();
3对数组的每一项给定函数,任一返回true,则为true 。some();
4对数组的每一项给定函数,返回每次函数调用的结果组成的数组:map();
5 forEach(); 没有返回值;






九、归并方法:
reduce(); 从数组的第一项开始 ,向后遍历; 
reduceRight(); 从数组的的最后一项开始,向前遍历;
都接收两个参数:调用的函数,作为归并基础的初始值(可选);
调用的函数接收4个参数:前一个值、当前值、项的索引、数组对象;
函数的返回值会作为第一个参数自动传给下一项;


 例:var value=[1,2,3,4,5];
     var sum=value.reduce(function(prev,cur,index,array){
        return prev + cur;
     }); 
     alert(sum);//15




Date类型:


   1.创建日期对象的方法:
      var now=new Date(); 可以传参;
      Date.parse(): 接收一个表示日前的字符串参数,返回相应日期的毫秒数;
      例:var someDate=new Date(Date.parse(“May 25,2004”));
           等价与:var someDate=new Date(“May 25,2004”);
      Date.UTC(): 同样返回毫秒数;
          Date.UTC( 2005,4,5,17,55,55);
          参数:年份、基于0的月份(1月为0)、月中的某一天、小时数、分钟、秒、毫秒;
  2 . 继承的方法:
        toLocaleString(); toString(); 返回日期;P101;
        valueOf(); 返回日期的毫秒表示;可以比较大小;
3.日期时间的方法:P102;
4. 取得时间戳:Date.now() ;  +new Date();//两种方法,首先考虑第一种


 var start=+new Date();
    
Sum(1,2);
alert(1);
var stop=+new Date();
     
alert(stop-start);
        


RegExp类型:
  
  创建正则表达式:
1. var pattern=/ [bc]at /flags; 字面量表示法
2. var pattern=new RegExp( “ 要匹配的字符串模式 ”, ”flags”);
所有元字符都要双重转义,转义过的字符也是如此
例如:字面量模式:/\[bc\]at/  转义为 /\\[bc\\]at/  前面加\;


   RegExp实例属性:
      globle: 布尔值,是否设置了g;
      ignoerCase: i 
      multiline: m 
      lastIndex:搜索下一个匹配项的开始位置,从0 开始算;
      source: 正则表达式的字符串表示,按照字面量的形式返回


 RegExp实例方法:
    exec(text) : 参数 :要应用模式的字符串,返回包含第一个匹配项信息的数组
                    没有匹配项,则返回null 
              额外属性:index :匹配项在字符串中的位置 
                        input: 表示应用正则表达式的字符串
test(text): 返回布尔值  ,经常与if连用
toLocaleString()和toString() : 返回正则表达式的字面量


RegExp构造函数属性


    使用这些属性可以从exec() 、test() 方法中提取更多的信息
两种访问方式:长、短属性名
input  $_  : 最近一次要匹配的字符串 
lastMatch  $&  : 最近一次的匹配项
lastParen   $+  : 最近一次匹配的捕获组
(Opera不支持前三个);
leftContext  $`  : 匹配项之前的内容
rightContext  $’  : 匹配项之后的内容 
multiline  $*   : 布尔值IE、Opera 不支持
RegExp.$1  ……  RegExp.$9 存储九个匹配的捕获组(编号的捕获组)
 
1. flags:
i: 忽略大小写;
g: 全部匹配;
m: 把\n识别为换行,多行模式;


2. 中括号
[abc]: 中括号中任意一个字符
[^abc]: 除了中括号中的任意一个字符
(linuw)|(php): 1. Linux 或php单词。2. 可实现向后引用$1,$2(replace替换)
(..) 3. 创造捕获组  4. $1…$9 存储捕获组
3. 元字符:
.  :  任意一个字符,除了换行和行结束符;
\w :  任意一个字母、数字、下划线;
\W:  任意一个非 字母、数字、下划线;
\d :  任意一个数字 
\D :  任意一个非数字
\s :  任意一个空格
\S :  任意一个非空格
\b :  单词边界
\B :  非单词边界


4. 量词:
+  1个或多个
*  任意多个
?  1个或0个
     {3}  3个
     {3,5}  3个到5个
     {3,}  3个以上
      ^   行首  /^a/匹配"an A",而不匹配"An a"
      $   行末  /a$/匹配"An a",而不匹配"an A"


 5.  js中使用正则的字符串对象的方法
      search();
      match();
      replace();
      split();


6.  正则实例
   
    电话号码:
     phone.match(/^131\d{8}$/)
  
     邮箱格式:
     phone.match(/^\w+@\w+\.\w+$/i)
    
高级替换:
 date="2016/05/11";
 //2016-05-11
 time= date.replace(/(\d+)\/(\d+)\/(\d+)/g,"$1-$2-$3");
 alert(time);//2016-05-11
   
  Function类型 :


     1 函数是对象,函数名是指向函数对象的指针;
     2定义函数的方法:
1. function sum(num1,num2){ } //函数声明
2. var sum=function(){} ;//注意分号,函数表达式
3. var sum=new Function(“ num1 ” , ”sum2” , ”return ”); //不推荐;


     注意:1. 使用不带圆括号的函数名是访问函数指针,不调用函数;
           2. 定义函数sum,赋值给anothersum ,将sum设为null,不影响anothersum进行sum操作。
           3. 没有重载 ,同名函数 后面的会覆盖前面的
    


     3 函数声明与函数表达式:
       函数声明:解析器会率先读取函数声明,使其在任何代码之前可用,
       函数表达式则不行;


     4 作为值的函数:
1. 当作参数传给一个函数;
2. 当作另一个函数的结果返回;
     5 函数内部属性
          arguments :类数组对象,包含着传入函数的所有参数
          callee:函数被调用时,arguments.callee 指向自身;
          caller: 保存着调用当前函数的函数的引用,在全局作用域中调用则返回null;arguments.callee.caller


this : 引用函数执行的环境对象,当在全局作用域中调用函数this应用window;
     6 函数属性和方法:
        length   :函数希望接收的命名参数的个数
  prototype :保存所有实例方法的真正所在


  两个非继承而来的方法,在特定的作用域中调用函数,实际上设置this
  apply(): 两个参数  :运行函数的作用域 、array实例或arguments ;
  call(): 多个参数 : this 、其余参数逐个列举,直接传给函数;
  用途:扩充作用域


  ES5方法:bind(); 创建一个函数实例,其this值会被绑定到穿个bind()函数的值,var objSayColor=sayColor.bind(obj);
  
  继承的方法:
      toString()和toLocaleString() ,始终返回函数的代码




基本包装类型:


  Boolean,Number,String;
  
  在访问基本类型值时,后台自动创建一个对应的实例,在实例上调用
方法,然后销毁这个实例;
 例:不能为其添加属性和方法
    var s1="chenzhijie";
    s1.color="green";
   alert(s1.color);//undefined






  注意:所有基本包装类型的对象在转换为布尔类型时值都是true,
对基本包装类型的实例调用typeOf(),返回object;
因此不建议直接显示的创建基本包装类型的对象:
        例:var obj=new Object(“some text”);


Boolean类型 :
  valueOf(): 返回true/false;
  toString(): 返回字符成”true”,”false”


Number类型:
  
  toFixed(): 参数:小数位数;按照指定的小数位返回数值的字符串表示
         例:var num=10.005;
         alert(num.toFixed(2));//10.01
  
  toExponential():参数:小数位数;返回以指数表示法表示的数值的字符串表示
         var num=10;
         alert(num.toExponential(1));//1.0e+1


 toPrecision(): 参数:所有数字的位数(不包括指数), 按适合度,返回以上两种格式
            
            var num=99;
            alert(num.toPrecision(1));//1e+2
            alert(num.toPrecision(2));//99
            alert(num.toPrecision(3));//99.0




  String类型:
      1. Length属性


      2. 继承方法valueOf(). toLocaleString(). toString().
都返回对象所表示的基本字符串值
   
            3. 方法
               charAt() 参数:字符位置,返回单个字符
               stringValue(): 参数:字符位置,返回单个字符
               charCodeAt() 参数:字符位置 ,返回字符编码
               fromCharCode(): 参数 接收多个字符编码,返回字符串
                            ( String构造函数本身的静态方法)
               例:alert(String.fromCharCode(104,101,108,108,111));




         4 . concat(): 参数:任意多个,拼接字符串
               
             
         5. slice(),两个参数:开始位置和结束位置
        substr(),两个参数:开始位置和结束位置
substring(): 两个参数:开始位置和返回的字符个数
          对原始字符串无影响;
          参数为负值时:slice()  参数与length相加
                        substr() 第一个参数与length相加,第二个为0;
                        substring() 所有负值参数都转化为0


          6. indexOf()从开头   lastIndexOf() 从末尾 :搜索字符串,返回字符串位置,没找为-1;
                参数:子字符串和开始位置。
           
       7. trim() : 创建副本,删除前置及后缀的所有空格


       8. 转换大小写:
         toLowerCase()、 toLocaleCase()、 toUpperCase()、toLocaleUpperCase()
   
       9. 模式匹配
            search(); 参数:正则表达式  返回第一个匹配项的索引,没有则返回-1;
            match(); 同exec() 。参数:正则表达式
            replace();第一个参数:字符串或RegExp对象。第二个参数:字符串或函数
             例子:
               function rep(text){
                  return text.replace(/[<>"&]/g,function(match  ,  pos  ,  originalText){
                 switch(match){
               case"<":
                return "&lt;";
                    case">":
                         return "&gt;";
           case "&":
                        return "&amp;";
           case "\"":
              return "&quot;";
                  }
 });
}
                 alert(rep("<p class=\" greeting\">hello\ world!</p>"));
            
    split() ; 两个参数:指定分隔符(字符串、RegExp)和 指定数组大小


    localeCompare(): 比较两个字符串 
       需要交换位置则返回1,相等为0 ,否则为-1
       例: var stringValue='yellow';
                alert(stringValue.localeCompare('brick'));//1
   
 内置对象
     Object   Array   String 
 单体内置对象:
     Global和Math
     
 Globle :(window对象来扮演)
   1. 所有在全局作用域定义的属性和函数都是Globle对象的属性
      所有原生引用类型的构造函数都是Globle对象 的属性
   2. 对URI进行编码的方法,用UTF-8编码替换无效字符
      encodeURI() :主要用于对整个URI
      (不会对本身的特殊字符进行编码,例如:冒号,正斜杠,问号,冒号)
      encodeURIComponent : 主要用于对URI中的某一段
                        (会替换所有非字母数字字符)


      decodeURI() 、decodeURIComponent()  分别解码所对应的方法编码的字符


   3. eval() 参数:要执行的字符串 
     
      A:可以引用在包含环境中定义的变量 
    var msg="hello";
  eval('alert(msg)');


      B:可以在eval() 调用中定义一个函数,然后在外部引用函数
          eval("function sayHi(){alert('hi');}");
sayHi();
  
  Math类型:
     常用方法:
       max()
       min()
       ceil() :向上取整
       floor():向下取整
       round(): 四舍五入取整
       random():返回0-1之间的随机数
       从整数范围内获取随机数的方法:
       值=Math.floor(Math.random() * 可能值的个数 +第一个可能的值 );
       var num=Math.floor(Math.random() * 10 + 1); //返回1-10 之间的随机数
原创粉丝点击