javascript学习笔记 - 引用类型

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript学习笔记 - 引用类型相关的知识,希望对你有一定的参考价值。

引用类型是一种数据结构,也称作对象定义,类似于类的概念。

对象是引用类型的实例。

javascript引用类型有:Object, Array, Date, RegExp, Function

使用new 关键字声明一个引用类型的实例。

一 Object

两种创建对象的方法。

obj = new Object()//对象声明

obj = {}//对象字面量 

对象字面量创建对象,并不会调用Object构造函数

二 Array

1.可以通过length属性删除或创建新的数组项

arr = [1,2,3];
arr.length = 4;//增加 [1,2,3,undefined]
arr.length = 2;//删除 [1,2]
arr[6] = 6; // [1,2,3,undefined,undefined,6]

2.检测数组

  Array.isArray()

3.转换方法

  调用数组的toString()方法,返回由数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串。实际上,为了创建这个字符串,会调用数组每一项的toString()。

4.栈方法

  栈是一种LIFO数据结构,数据插入和删除都发生在栈的顶部位置。

  push(), 接受任意数量的参数,把他们逐个添加到数组的末尾,并返回新的数组长度(入栈)

  pop(), 删除数组最后一个元素,并返回删除项的值(出栈)

5.队列方法

  队列方法 是FIFO数据结构。

  shift(),  删除数组第一项并返回该项的值(队列头部出)

  push(), 从数组末尾插入若干项(队列尾部入)

  或

  unshift(), 从数组头部插入若干项,并返回新长度(队列头部入)

  pop(), 删除数组最后一项 (队列尾部出) 

6.重排序方法

  reverse() 和 sort() 返回的是经过排序后的数组

7.操作方法

  concat() 用于连接两个或多个数组。最终返回一个一维数组。它不会改变原有数组的值,返回的是副本

  slice() 基于当前数组中的一个或多个项创建一个新数组。接受1或2个参数。第一个是返回项的起始位置,第二个为结束位置

  splice() 强大的方法。可以做删除、插入、替换。接受3个参数。参数1,起始位置; 参数2,要删除的项目数; 参数3, 要插入的项。参数还可以传任意多个,之后的都作为要插入的项按顺序插入到数组中

8.位置方法

  indexOf() ,lastIndexOf()   都接受1个参数,最多可接受2个。参数1,要查找的值; 参数2, 查找的起点位置的索引。从数组的下标0开始搜索。lastIndexOf() 从最后一个位置开始向前查找。返回查找的值在数组中的位置,找不到返回-1

9.迭代方法 

  每个方法都接收两个参数。参数1,在每一项上运行的函数;参数2, 运行该函数的作用域对象

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

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

  forEach() 对数组的每一项运行给定的函数, 无返回值

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

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

10.归并方法

  reduce() ,reduceRight() 这两个方法都接收两个参数。参数1,数组每一项上调用的函数;参数2,可选,作为归并基础的初始值。传递给reduce(),reduceRight()的函数接受4个参数。前一个值、当前值、项的索引和数组对象。这个函数返回的任何值都会作为第一个参数自动传递给数组的下一项。

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

三 Date

  new Date() 在不传递参数的情况下,新创建的对象自动获得当前日期和时间。参数接收毫秒的timestamp

  Date.parse() 接收表示日期的字符串,返回相应的日期毫秒数timestamp。日期字符串的格式会因为浏览器地区设置的不同而不同。如果传入的字符串不能解析,则返回NaN

  Date.UTC() 接收的参数分别是年份、基于0为一月的月份、月中的日期,1-31、小时,0-23、分钟、秒、毫秒。这些参数只有年和月是必需的。

  1.继承的方法

    toLocalString() 按照与浏览器设置的地区相适应的格式返回日期和时间

    toString() 通常返回带有时区信息的日期和时间,其中时间一般以军用时间表示。

    valueOf() 不返回字符串,而是返回日期的毫秒表示。因此可以直接使用比较操作符来比较日期值

四 RegExp

  格式:   

var expression = / pattern / flags;

  1.flags 为标志。分别为g、i、m。

    g:表示全局模式。即模式将匹配所有的字符串,而不是在发现第一个匹配项时就立即停止。

     i:表示不区分大小写。

     m:表示多行模式,即在到达一行文本末尾时还会继续查找下一行。

    2.RegExp实例的属性

    global:是否设置了g标志;

    ignoreCase:是否设置了i标志;

    lastIndex:表示开始搜索下一个匹配项的字符位置,从0算起;

    multiline: 是否设置了m标志;

    source: 模式的字符串表示

var pattern = /\[bc\]at/i;

alert(pattern1.global);   //false
alert(pattern1.ignoreCase);   //true    
alert();   //false
alert();   //0
alert();   //"\[bc\]at"

  3.RegExp实例方法

    exec() 接收1个参数。为药应用模式的字符串。

    var text = "father and mother i love you";
    var pattern = /i love you/gi;
    var matched = pattern.exec(text);

五 Function类型

  每个函数都时Function类型的实例。函数也是对象。

  声明函数:

    function func_name () {}       //javascript解析器会在程序执行时率先读取函数声明,使其在执行任何代码之前可用(可访问)  
    var func_name = function(){};  //解析器执行到它所在的代码行,才会被解释执行。

  因此函数名是个变量,保存的是指向函数对象的指针,不会与某个函数绑定,与包含对象指针的其他变量没什么区别。

  1.没有重载

    声明两个同名的函数,第二个会覆盖掉第一个

  2.作为值的函数

    函数名本身就是变量。因此函数体可以当作值来使用。可以当参数进行传递,也可以当其他函数的返回值。

function callSomeFunction (someFunction, someArgument){
      return someFunction(someArgument);  
}

      3.函数内部属性

    函数内部有两个特殊的对象:arguments 和 this 

    *arguments对象保存的是所有传入函数内部的参数。

    *arguments.callee。这是一个指针,指向拥有该arguments对象的函数

function factorial(num) {
    if(num <=1){
       return 1;
    }else{
       return num*arguments.callee(num-1);//递归调用
       //相当于:
       //return num*factorial(num - 1); 
       //这样消除了函数名与内部递归调用函数名的紧密耦合性
    }
}

             *this 引用的是函数据以执行的环境的变量对象。

             *caller 对象属性。此属性保存的是调用当前对象的函数的引用。如果在全局作用域中调用当前函数,值为null

function outer()
{
     inner();  
}

function inner()
{
     alert(arguments.callee.caller);
}

outer();//返回outer()函数的源代码

      4.函数属性和方法

    length ---  FunctionObject.length 函数参数的个数。函数没有参数,则返回0

    apply() --- Function.apply(scope[ ,Function.arguments||Array])//传递的参数可以为Arguments对象,也可以为参数数组

    call() ---   Function.call(scope[, argument1,argument2,.......])//所要传递的参数必须一一列举吹来

    这两个函数都是扩展它自身运行时所在的作用域。参数1,这两个函数运行时所在的作用域(一般都为对象);参数2, 传递给这个函数的参数。

window.color = ‘red‘;
var o = {‘color‘:‘blue‘};

function sayColor(){
     alert(color);      
}

sayColor(); // red

sayColor.call(this) //red
sayColor.call(window) //red
sayColor.call(o) //blue

    使用这两个函数的好处是:降低对象与方法之间的耦合性。

六 基本包装类型

 未完待续。。。。。。

 

      

 

以上是关于javascript学习笔记 - 引用类型的主要内容,如果未能解决你的问题,请参考以下文章

《JavaScript高级程序设计》学习笔记——引用类型

JavaScript 高级程序设计第 6 章——集合引用类型学习笔记

《javascript高级程序设计》学习笔记 | 4.1.原始值与引用值

JavaScript-函数和OOP-学习笔记

JavaScript学习笔记函数和数组

JavaScript学习笔记—— 4. 变量作用域和内存问题