• JavaScript引用类型


    一.引用类型的值(对象)是引用类型的一个实例。引用类型是一种数据结构,用于将数据与功能组织在一起。ECMAScript有一些内置引用类型(如Object)可以用来创建特定的对象。

    二.Object类型

    1.Object是一个基础类型,其他所有类型都从Object继承了基本的行为,多用于存储和传递数据

    2.创建Object实例的方法

    (1)使用new操作符

    var person=new Object();
    person.name="liu";
    person.age=21;

    (2)对象字面量法

    var person={
        name:"liu",  //用逗号
        age:21       //不能添加逗号
    };
    
    var person={};   //与var person=new Object()相同

    3.访问对象的属性

    person.name

    person[“name”]  //访问属性以字符串的形式放到方括号中

    通过变量访问属性

    var propertyName=”name”;

    person[propertyName]; //通过变量访问属性

    三.Array类型

    1.ECMAScript数组的每一项都可以保存任何类型的数据

    2.创建数组

    (1)new操作符

    var color=new Array();

    var color=new Array(20);

    var color=new Array(“red”,"blue”);

    (2)对象字面量法

    var color=[“red”,"blue”];

    3.length属性

    (1)在数组末尾添加新项color[color.length]=”black”

    (2)数组最后一项length-1

    4.检测数组

    if(value instanceof Array){}

    if(Array.isArray(value)){}

    5.转换方法

    (1)toLocaleString(),toString(),valueOf()

    (2)alert(color)调用的是toString()方法

    (3)join()方法

    alert(color.join(|))

    (4)如果数组中的某一项是null或undefined,则返回空字符串

    6.栈方法

    栈数据结构:后进先出

    push()添加到数组末尾,返回新的数组的长度push(“red”,"black”) //2

    pop()从末尾移除最后一项,返回移除的项

    7.队列方法

    队列数据结构:先进先出

    shift()移除数组的第一项,返回移除的项

    unshift()添加到数组前端,返回新的数组长度

    8.重排序方法

    (1)reverse()翻转数组项的顺序

    (2)sort()

    默认是升序,调用每个数组项的toString(),比较得到的字符串

    接受一个比较函数作为参数

    升序:value.sort(compare)

    第一种比较函数:

    function compare(value1,value2){
        if(value1<value2){
            return -1;
        }
        else if(value1>value2){
            return 1;
        }
        else{
            return 0;
        }
    }
    第二种比较函数:(数值类型的数组或valueOf()方法返回数值类型的对象类型)
    function compare(value1,value2){
        return value2-value1;
    }
    9.操作方法
    (1)concat()将参数添加到原有数组中,参数可以是字符串或数组,返回新数组
    (2)slice(起始位置,结束位置),返回新数组
    (3)删除:splice(要删除的第一项的位置,要删除的项数)
       插入:splice(起始位置,0,要插入的项)
       替换:splice(起始位置,要删除的项,要插入的项)
       splice()方法返回删除的项组成的数组
    10.位置方法
    (1)indexOf(要查找的项,)
    (2)lastIndexOf()
    11.迭代方法
    every(),filter(),forEach(),map(),some()
    接受要在每一项上运行的函数
    该函数接受三个参数:数组项的值,该项在数组中的位置,数组对象本身
    var number=[1,2,3,4,5];
    var result=number.every(function(item,index,array){
        return (item<2);
    })
    alert(result); //false

    12.归并方法

    reduce() //从左到右遍历

    reduceRight()//从右到左遍历

    迭代数组中所有项,并构建一个最终返回值

    接受要在每一项上运行的函数

    该函数四个参数:前一个值,当前值,项的索引,数组对象

    例:

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

    四.Date类型

    1.创建日期对象

    var now=new Date();

    2.根据特定的日期和时间创建日期对象

    (1)Date.parse()方法:

    var someDate=new Date(Date.parse(“May 12.2004”));//等于var someDate=new Date(“May 12.2004”);

    (2)Date.UTC()方法:

    年和月是必需的(天数默认为1,其他为0),基于零的月份

    var someDate=new Date(Date.UTC(2013,10,28,22,0,0)); //2013年11月28日10点0分0秒

    等同于var someDate=new Date(2013,10,28,22,0,0);

    3.Date.now()方法:返回调用这个方法时的日期和时间的毫秒数

    var nowtime=Date.now(); //等同于var nowtime= +new Date();

    4.继承的方法

    (1)toLocaleString():时间格式包含AM PM

    (2)toString():带有时区信息

    (3)valueOf():返回日期的毫秒,可用于比较日期值

    var Date1=new Date(2013,10);

    var Date2=new Date(2013,11);

    alert(Date1<Date2); //true

    5.日期、时间组件方法

    getMonth()(基于0的月份)

    getDay()(基于0的星期几)

    五.RegExp类型

    1.字面量形式定义正则表达式

    var pattern1=/pattern/flags;

    flags有三种:g,i,m

    2.使用RegExp构造函数定义正则表达式

    var pattern1=new RegExp(“liu”,"i”) //接受两个字符串

    3.元字符转义??

    4.循环中字面量始终使用同一个RegExp实例,而使用RegExp构造函数每次循环都会创建新的实例

    5.RegExp实例属性

    6.RegExp实例方法

    (1)exec()                                   //再看

    (2)test():

    接受一个字符串参数,在模式与该参数匹配的情况下返回true

    var text="000-00-0000";
    var pattern=/d{3}-d{2}-d{4}/;
    if(pattern.test(text)){
        alert("it is true");
    }

    7.字面量和构造函数的toLocaleString() toString()方法都会返回字面量

    8.RegExp构造函数属性

    用于从exec() test()中提取中更具体的信息

    RegExp.input

    RegExp.lastMatch

    RegExp.paren

    RegExp.leftContext

    RegExp.rightContext

    RegExp.multiline

    六.Function类型

    1.函数实际是对象,每个函数都是Function类型的实例,函数名是指向函数对象的指针

    2.构造函数

    (1)function sum(num1,num2){
            return num1+num2;
        }

    (2)var num=function(num1,num2){
            return num1+num2;
        };

    (3)var num=new Function("num1","num2","num1+num2"); //不推荐

    函数名与包含对象指针的其他变量没什么区别,一个函数可以有多个名字

    3.没有重载

    两个同名函数,创建第二个函数时,第二个函数覆盖了第一个函数

    4.函数声明与函数表达式

    解析器会率先读取函数声明,表达式会在解析器执行到它时才解释执行

    alert(sum(10,20));
    var sum=function(sum1,sum2){
        return sum1+sum2;
    }; //会出错,无法读取函数声明,变量sum不会保存函数的指针,因为没有执行到那

    5.作为值的函数

    (1)把一个函数传递给另一个函数

    function callSomeFunction(someFunction,someArgument){
        return someFunction(someArgument);
    }
    //第一个参数是一个函数,第二个参数是传给该函数的值,返回执行完第一个参数后的结果
    例:
    function add(num){
        return num+10;
    }
    var result=callSomeFunction(add,10);//这里访问函数的指针而不执行函数,去掉函数名后的圆括号
    alert(result);//20
    (2)从一个函数返回另一个函数
    function myFunction(propertyName){
        return function(object1,object2){
            var value1=object1[propertyName];
            var value2=object2[propertyName];
            if(value1<value2){
                return -1;
            }
            else if(value1>value2){
                return 1;
            }
            else{
                return 0;
            }
        }
    }
    
    var data=[{name:"zhong",age:21},{name:"liu",age:22}];
    data.sort(myFunction("name"));
    alert(data[0].name); //liu
    
    data.sort(myFunction("age"));
    alert(data[0].name); //zhong
    

    6.函数内部属性

    两个特殊的对象

    (1)arguments对象:类数组对象,包含传入函数的所有参数,有一个callee属性,该属性是一个指针,指向拥有这个arguments对象的函数

    递归算法:

    function myFunction(num){
        if(num<=1){
            return 1;
        }else{
            return num*arguments.callee(num-1); //避免耦合,不受函数名影响
        }
    }
    alert(myFunction(5)); //120

    (2)this对象:引用函数执行时的环境对象

    window.color="red";
    var o={color:"blue"};
    function sayColor(){
        alert(this.color);
    }
    sayColor();  //"red"
    o.sayColor=sayColor;  //访问函数的指针而不执行函数,要去掉函数名后边的圆括号
    o.sayColor(); //"blue"

    (3)caller

    7.函数属性和方法

    函数是对象,所以函数也有属性和方法

    属性:length,prototype

    (1)length属性:表示函数接受命名参数的个数

    function sum(sum1,sum2){
        return sum1+sum2;
    }
    alert(sum.length);  //2

    (2)prototype属性:用于保存引用类型的所有实例方法

    方法:apply(),call(),bind()

    可以传递参数

    (1)apply():接受两个参数apply(this,参数数组)

    function sum(num1,num2){
        return sum1+sum2;
    }
    function sum1(num1,num2){
        return sum.apply(this,arguments);//或apply(this,[num1,num2])
    }
    alert(sum1(10,10)); //20

    (2)call():

    function sum(num1,num2){
        return sum1+sum2;
    }
    function sum1(num1,num2){
        return sum.call(this,num1,num2);//参数必须列举出来
    }
    alert(sum1(10,10)); //20

    扩充函数运行的作用域

    window.color="red";
    var o={color:"blue"};
    function sayColor(){
        alert(this.color);
    }
    sayColor();  //"red"
    
    sayColor.call(this); //red
    sayColor.call(window); //red
    sayColor.call(o); //blue

    bind()创建一个函数的实例

    window.color="red";
    var o={color:"blue"};
    function sayColor(){
        alert(this.color);
    }
    var objectSayColor=sayColor.bind(o);
    objectSayColor(); //blue

    七.基本包装类型

    因为有基本包装类型,所以js中的基本类型值可以当做对象来访问,三种基本包装类型:Boolean,Number,String

    (1).每个包装类型都映射到同名的基本类型

    (2).在读取模式下访问基本类型时,就会创建对应的基本包装类型的一个对象,从而进行数据操作

    (3).操作基本类型的语句一执行完,就会立即销毁新创建的包装对象

    var s1="some text";
    var s1=new Stirng("some text");//后台自动创建基本包装类型的对象
    var s2=s1.substring(2);
    s1=null;                       //执行完后立即销毁

    (4).对基本包装类型的实例调用typeof会返回"object”,而且所有基本包装类型的对象都会被转换为布尔值true

    var message=new Boolean(false);     //不建议实例化
    var result=message &amp;&amp; true;  //message转换为true
    alert(result);  // true

    1.Boolean类型

    Boolean类型是与布尔值对应的引用类型

    基本类型与引用类型的布尔值的区别(所以不建议实例化,会造成混淆):

    (1)typeof对基本类型返回“boolean”,对引用类型返回“object”

    (2)instanceof检测Boolean对象返回true,检测基本类型的布尔值返回false

    2.Number类型

    Number是与数字值对应的引用类型

    (1)创建Number对象,会调用Number构造函数,向其中传递相应的数值

    var numberObject=new Number(10); //不建议实例化 因为

    (2)Number类型重写了valueOf()//返回基本类型表示的数值,toLocaleString(),toString()//返回字符串形成的数值

    var num=10;

    alert(num.toString()); //10

    alert(num.toString(2)); //1010

    (3)toFixed方法

    (4)toPrecision方法

    (5)typeof,instanceof检测的区别

    3.String类型

    Stirng类型时字符串的包装类型,使用String构造函数来构建

    var stringObject=new String(“hello world”);

    Stirng类型的方法:

    (1)字符方法:用于访问字符串中特定字符

    charAt()

    charCodeAt()

    (2)字符串操作方法

    concat()用于拼接字符串,一般用+代替

    slice(子字符串的开始位置,结束位置的后一个位置)

    substring(子字符串的开始位置,结束位置的后一个位置)

    substr(子字符串的开始位置,子字符串的字符个数)

    参数为正的情况下返回基本相同,为负时有较大区别,不详述

    (3)字符串位置方法

    indexOf(“要查找的字符","开始查找的位置") //顺序查找

    lastIndecOf() //逆序查找

    var myString="hello world";
    var position=new Array();
    var pos=myString.indexOf("o");
    while(pos>-1){
        position.push("pos");
        pos=myString.indexOf("o",pos+1);
    }
    alert(position);
    (4)trim()
    删除字符串前置和后缀的空格
    var myString=” hello world ”;
    var newString=myString.trim();
    alert(newString); //”hello world”
    alert(myString);  //”    hello world    ”创建的是字符创的副本,所以不改变原字符串

    (5)字符串大小写转换

    toUpperCase()

    toLocaleUpperCase() //针对特定地区,在不知道代码在何处运行时使用

    toLowerCase()

    toLocaleLowerCase()

    (6)字符串模式匹配方法

    match() : //再看

    search():接受一个由字符串或者RegExp对象指定的正则表达式,返回字符串中第一个匹配项的索引

    replace(字符串或RegExp对象,字符串或函数) //不详写用法

    split():指定分隔符,将字符串分割成多个子字符串,并将结果放到数组中,第一个参数为分割符,第二个为数组的大小

    (7)localeCompare()方法

    比较两个字符串,返回-1,0,1

    (8)fromCharCode():String构造函数的一个静态方法,接受一或多个字符编码,转换成字符串

    alert(String.fromCharCode(104,101,108,108,111)); //”hello”

    (9)HTML方法

    八.单体内置对象

    1.Global对象

    所有在全局作用域中定义的属性和函数都是Global对象的属性

    (1)URI编码方式

    对URI进行编码,以便发送给浏览器,有效的URI中不能包含某些字符,例如空格,所以要进行编码

    encodeURI()

    encodeURIComponent()

    decodeURI()

    decodeURIComponent()

    (2)eval()方法

    像一个ECMAScript解析器,接受要执行的ECMAScript字符串作为参数,并执行

    (3)Global对象的属性

    undefinded,NaN,Number,String,Boolean,Object,Function,Array,Infinity,Date,RegExp,Error等

    (4)window对象

    Web浏览器将Global对象作为window对象的一部分,在全局作用域中声明的所有变量和函数,就成了window对象的属性

    var color="red";
    functin sayColor(){
        alert(window.color);
    }
    window.sayColor(); //"red"

    2.Math对象

    (1)Math对象的属性

    Math.PI//π的值

    Math.SQRI2//2的平方根

    (2)min() max()方法

    var max=Math.max(3,4,5);
    
    alert(max);//5
    
    var min=Math.min(3,4,5);
    
    alert(min);//3
    
    var values=[1,2,3,4];
    
    var max=Math.max.apply(Math,values); 

    (3)舍入方法

    Math.ceil()向上舍入

    Math.floor()向下舍入

    Math.round()标准舍入,四舍五入

    (4)random()方法

    Math.random()返回0到1的随机数

    从某个整数范围内随机选择一个值:

    值=Math.floor(Math.Random()*可能值的总数+第一个可能的值)

    例:2到10的整数:Math.floor(Math.Random()*9+2); //2到10有9个数

    写成函数:

    function getRandom(min,max){
        var length=max-min+1;
        return Math.floor(Math.Random()*length+min);
    }
    var result=getRandom(2,10);
    alert(result);

    (5)其他方法

    Math.tan(x);

    Math.sin(x);

    Math.cos(x)等                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               

  • 相关阅读:
    cogs 826. [Tyvj Feb11] GF打dota 次短路详细原创讲解! dijkstra
    cogs 2450. 距离 树链剖分求LCA最近公共祖先 快速求树上两点距离 详细讲解 带注释!
    cogs 647. [Youdao2010] 有道搜索框 Trie树 字典树
    cogs 293. [NOI 2000] 单词查找树 Trie树字典树
    P4550 收集邮票
    P1850 换教室 期望dp
    洛谷 UVA11021 Tribles
    P3802 小魔女帕琪 概率与期望
    P3369 【模板】普通平衡树 01Trie树
    P2765 魔术球问题
  • 原文地址:https://www.cnblogs.com/liuzhongyi1992/p/3454418.html
Copyright © 2020-2023  润新知