自我学习而已——javascript——引用类型基础

1.声明一个新的对象或者数组的时候。不使用new object()或者new array()的话,都不会调用构造函数

2.javascript中的数组长度length属性是可读写的

  javascript中数组长度是可读写的,那将会导致

        var color = ["red", "blue", "yellow"];
        color.length = 2;
        alert(color[2]);
View Code

的返回值是undefined,因为数组长度减小了,相当于把最后一项删除了,如果是给超出数组范围的元素赋值的话,会自动加长数组至该长度位置,中间未赋值部分为undefined。数组是有上限的,超出上限会有问题,但是一般超不了

3.转换方法,用 toString和toLocalString方法可以转化数组为字符串(用逗号连接),用join方法可以改变连接符

4.数组的灵活运用,类似其他的数据结构

  类似堆栈:pop和push,push——推入堆栈(参数任意个,依次推入数组中,返回值为改变之后的数组长度),pop——推出堆栈(无参数,返回值为被推出的一项),栈顶就是数组最后一项 

  类似队列:push和shift方法,shift——推出数组第一项(无参数,返回值为数组的第一项),push——推入数组

  类似反队列:unshift和pop方法,unshift——推入数组的第一项(无参数,返回新数组长度),pop——推出末尾数组末尾项

5.数组的重新排序

   reverse()方法——直接让反转数组项的顺序

   sort()方法——将数组内容通过toString方法转化为字符串然后比较大小,所以如下

        var values = [undefined,0, 1, 5, 10, 15, NaN];
        values.sort();
        alert(values);
View Code

返回值是[0, 1, 10, 15, 5, NaN, undefined](ps:alert的时候undefined选项不会被显示出来,console.log的时候会)

  另,sort()方法可以接受一个比较函数,这个函数有两个参数,如果第一个参数应该位于第二个参数前面,这个函数就返回一个负数,如果第一个参数位于第二个参数后面,这个参数就返回一个正数,如果相等就返回0(即返回 1 的话就调换位置)

       function compare(value1, value2) {
           //    return value2-value1;

           if (value1 < value2) {
               return 1;
           } else if (value1 > value2) {
               return -1;
           } else {
               return 0;
           }
       }
       var values = [0, 1, 5, 10, 15];
       values.sort(compare);
       alert(values);
View Code

使用这样一个比较函数的话就可以用来使得数组降序排列

6.数组的操作方法

  数组操作方法——concat(),slice(),splice();

  concat()方法(不改变原数组)接受一个(可以是单个元素)或者多个数组(可以是多层数组)作为参数,这种方法可以用来拷贝当前数组并且添加参数于这个数组中然后返回,如果不传参数就是单纯拷贝这个数组(可以用来拷贝函数,值传递)

  slice()方法(不改变原数组)接受一个或者多个参数,使得数组被提取出一部分,如果转入一个正参数,就是从这个位置开始截取到末尾,如果负参数就是倒着截取,如果多个参数就是截头部不截尾来截取数组

  splice()方法(改变原数组)接受3-任意个参数,第一个参数代表选取开始项,第二个参数代表选取从开始项往后的项的数目,从第三个参数开始代表前面选取的数组元素将要被替换成的元素(这个参数省略的话就是替换成空,相当于删除)。这个方法返回的是被替换的一部分。

       var colors = ["red", "green", "blue","yellow","black"];
       var remove = colors.splice(2, 1);
       alert(colors);
       alert(remove);    
View Code

这个函数返回red,green,yellow,black(原数组被更改了)和blue(被删除项);

7.数组位置方法

  indexOf和lastIndexOf,找到返回位置,没找到返回-1  注意:如果元素是对象的话,比较的是指针,不是值比较;

8.迭代方法

   ECMAScript5为数组定义了5个迭代方法

    every()——对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true

    filter()——对数组中每一项运行给定函数,返回该函数会返回true的项组成的数组

    forEach()——对数组中的每一项运行给定的函数,这个方法没有返回值

    map()——对数组每一项运行给定的函数,返回每次函数调用的结果组成的数组

    some()——对数组中每一项运行给定函数,如果该函数有一项返回true,则返回true

    传入的函数有三个参数,分别是 当前元素 当前元素位置 整个数组地址(也就是说,改变函数内的数组,原数组也会变)

    var number = [1, 2, 3, 4, 5, 4, 3, , 2, 1];
       var everyResult = number.map(function (item,index,array) {
           document.write("<p> Item:" + item + "Index:" + index + "</p>");
           array.push(index);
           console.log(array);
       });
       alert(number);
View Code

  这样原数组会变,然后会循环原数组长度次,有点像for in用法;

9.Date类型

  date类型,声明:var now=new Date();不带任何参数的声明将会自动获得当前的时间和日期,由于各个地区和浏览器版本支持不一致,所以不推荐使用字符串方式声明其他时间对象

  

    var y2k = new Date(Date.UTC(2000, 0));
       var y22 = new Date(2000, 0, 3, 17, 23, 42);

  y2k:Sat Jan 01 2000 08:00:00 GMT+0800 (中国标准时间)  (8点的原因是因为北京时间和国际标准差了8小时)

  y22:Mon Jan 03 2000 17:23:42 GMT+0800 (中国标准时间) (推荐这种声明方式,不容易出错)

  日期格式化:由于各个浏览器原因,日期转化为字符串是没有统一格式,所以没有必要  

  日期数值化:valueOf()方法,以毫秒表示时间对象离1970年1月1号0时的差,这个可以用来比大小,越大的越晚

10.RegExp类型

11.String类型的常用方法

  Str.charAt(i):返回 Str 对应 i 位置的字符

  Str.charCodeAt(i):返回 Str 对应 i 位置的字符的编码

  Str.concat(str1):把 Str 和 str1连接起来,并且存储在返回值内(注意:这个方法不会改变Str的值

  Str.substring():一个正参数,从这个参数切到尾 ; 2个正参数 i j,从i切到j-1(参数为正时使用这个)

  Str.substr():一个负参数 -i,倒着切 i 位(参数为负数用这个方法好)

  Str.indexOf():一个参数, 返回这个字符第一次出现所在位置 ;2个参数, 从第二个参数开始往后找

  Str.lastIndexOf():一个参数,返回这个字符最后一次出现位置;2个参数,从第二参数往前找

  Str.trim()——ECMAScript5:删除前置和后缀空格,并且创建新副本返回(注意:这个方法不会改变Str

  Str.toLowerCase():把 Str 转换为小写

  Str.toUpperCase():把 Str 转换为大写

12.字符解析方法

  encodeURI():将uri中的空格符转化为utf-8编码(适用转化完整的URI,保留除空格之外的字符)

  encodeURIComponent():将uri的所有非数字字母的字符转化为utf-8编码字符(常用于转化QueryString,查询字符串)

原文地址:https://www.cnblogs.com/yansi/p/3163474.html