首页 » PHP技术 » js小刀 » js引用类型篇

js引用类型篇

 

两种不同的数据类型
    基本类型:保存在栈内存中的简单数据。即这种值完全保存在内存中的一个位置
            数据类型:undefined,null,boolean,string,number它们分别占用了固定空间大小,可以提高查询速度。是按值访问

    引用类型:保存在堆内存中的对象,意思是变量中保存的实际上只是一个指针。这个指针指向内存中的另一位置。该位置 保存对象;

                  引用类型的值必须在堆内存中为这个值分配空间。是按引用访问,引用类型的值是object的实例
                  数据类型:object

引用类型的值(对象)是引用类型的一个实例。引用类型是一种数据结构,用于将数据和功能组织在一起,
    也常被称为类。也被称为对象定义。因为它是描述的是一类对象所具有的属性和方法

Object类型
    大多数引用类型的值都是Object类型的实例,虽然object的实例不具备多少功能。但对于在应用程序中存储和传输数据而言。是非常理想的选择
    表示方法一:
    var person = new Object();
        person.name='supeng';
        person.age=23;
    表示方法二:字面量法.在开发人员中大都青睐这个表示法,给人以封闭数据的感觉
    var person = {
        name:'supeng',
        age:23,
        test:{
            sex:'男',
            class:102
        }
    }

Array类型
    创建方式一:
    var colors = new Array();
    var colors = new Array(3); 预先保存的项目数3项,而相应的值都为undefined
    var colors = new Array('red','blue','yellow');

    length属性
    ......

    转换方法:
        所有对象都具有toLocaleString(),toString(),valueOf(); 其中toString()和valueOf()返回相同的值
        var person1 = {
            toLocaleString :function(){
                return 'Nokolaos';
            },

            toString:function(){
                return 'Nololaos';
            }
        }

        var person2 ={
            toLocaleString:function(){
                return 'supeng';
            },

            toString:function(){
                return 'su';
            }
        }

        var people = [person1,person2];
        alert(people);
        alert(people.toString);
        alert(people.toLocaleString());

    栈方法
        数组的表现就像栈一样,栈是一种LIFO(last-in-first-out,后进先出)的数据结构,也就是最新添加的项最早被移除。而栈中项的插入(推入),移出叫(弹出),只发生在一个位置----栈的顶部
        为数组提供了push()和pop()方法
        push()可接收无数个参数,把它们逐个添加到数组的末尾。并返回修改后数组的长度
        pop()方法是从数组中移除最后一项,减少数组的length值。然后返回移除项
        eg
            var colors = new Array();
            var count = colors.push('red','blue');  //2
            alert(count);

            count = colors.push('black'); //推入另一项
            alert(count);    //3

            var item = colors.pop(); //取得最后一项
            alert(item);
            alert(colors.length);

    队列方法
        队列数据访问的规则是FIFO(first-in-first-out 先进先出)。队列在列表的末端添加项,从列表的前端移出项
        shift()。它能够从数组中移除第一项并返回移除项,同时将数组长度减1.结合shift()和push()方法。可以像使用队列一样使用数组
        eg
            var colors = new Array();
            var count = colors.push('red','green');    //推入
            alert(count);    //2;

            count  = colors.push('black');    //推入另一项
            alert(count);    //3

            var item = colors.shift();    //取得第一项
            alert(item);    //red
            alert(colors.length);    //2
        unshift()与shift()功能相反.它在前端添加任意个项,并返回新的数组长度。因此。unshift()和pop()可以从相反的方向来模拟列队。
            即在数组前端添加项。从数组末尾移除项,即FILO(first-in-last-out,先进后出)
        eg
            var colors = new Array();
            var count = colors.unshift('red','green');    //推入
            alert(count);    //2

            count = colors.unshift('black')    //推入
            alert(count);    //3

            var item = colors.pop();    //取得最后一项
            alert(item);    //green
            alert(colors.length);    //2

    重排序方法:
        reverse()和sort();reverse()反转数组顺序
        ......

    操作方法
        concat()方法可以基于当前数组创建新的数组。
        eg
            var colors = ['red','green','black'];
            var colors2 = colors.concat('yellow',["blue","brown"]);        // red,green,black,yellow,blue,brown
        slice()截取数组,它能够基于当前数组中的一个或者多个项创建新数组
        eg
            var colors = ['red','green','blue','yellow','purple'];
            var colors2 = colors.slice(1);    //green blue yellow purple
            var colors3 = coors.slice(1,4);    //green blue yellow
        splice()
            删除:可以删除任意数量的项,二个参数,要删除的起始位置和要删除的项数 splice(0,2);删除数组中的前两项
            插入:可以向指定位置插入任意数量的项,起始位置,0(要删除的项数),任意个插入的项目值 splice(2,0,'red','green');
            替换:可以向指定位置插入任意数量的项,同时删除任意数量的项,起始位置,要删除的项数,和要插入的任意项目数 splice(2,1,'red','blue');

Date类型
    创建日期对象的实例
        var now = new Date();    //当前日期和日间
        var someDate = new Date('May 25, 2005');
        var someDate = new Date(Date.UTC(2005,4,5,17,55,55));
        var someDate = new Date((Date.parse('May 25, 2005'));    //创建特定的日期对象

    继承方法
        toLocataleString(),toString(),valueOf();
        ie7
            tolocaleString()
            toString()
        firefox
            tolocaleString()
            toString();
        safari
            tolocaleString();
            toString();
        chrome
            toLocaleString();
            toString();
        opera
            toLocaleString();
            toString();
        --------------------
        valueOf()返回的是日期毫秒数而不是字符串
    日期格式化:
        toDateString()        特定于实现 星期几 月 日 年
        toTimeString()        特定于实现 时 分 秒 和时区
        toLocaleDateString()    特定于时区 星期几 月 日 年
        toLocaleTimeString()    特定于时区 时 分 秒 和时区
        toUTCString()        特定于实现的格式完整的UTC日期
    日期、时间组件方法
        getTime();
        ......

RegExp类型
    正则表达式
        var expression = /pattern/ flags;
        flags
            g    全局匹配
            i    不分大小写
            m    多行匹配
        元字符
            ({[^$|?*+.]})
    regexp实例属性
        global        表示是否设置了g标志
        ignoreCase    表示是否设置了i标志
        lastIndex    表示开始搜索下一个匹配项的字符位置,从0算起
        multiline    是否设置了m标志
        source
    regexp实例方法
        exec():接收一个应用模式字符串参数
        var text = 'mom and dad and baby';
        var pattern = /mom( and dad( and baby)?)?/gi;

        var matches = pattern.exec(text);
    regexp构造函数属性:静态属性
        长属性名    短属性名    说明
        Input        $_        最近一次要匹配的字符串。 opera未实现
        lastMach    $&        最近一次匹配项    opera未实现
        lastParen    $+        最近匹配的捕获组 opera未实现
        leftContent    $’        input字符串中lastMatch之前的文本
        multiline    $*        是否启用了多行模式    ie opera未实现
        rightContent    $'        input字符中lastMatch之后的文本

        if(pattern.test(text)){
            alert(RegExp.input);
            alert(RegExp.lastMatch);
            alert(RegExp.rightContext);
            ......
        }

Function类型
    每一个函数都是Function类型的实例

    没有重载
        ......

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

    作为值的函数
        从函数中返回另一个函数是一个极为有用的一种技术
        函数嵌套
        ......

    函数内部属性
        函数内部有两个特殊对象 arguments和this,虽然arguments的主要作用是保存函数参数。但这个对象还有一个名收callee属性。
        该属性是一个指针。指向这个arguments对象的函数
        function factorial(num){
            if(num<=1){
                return 1;
            }else{
                //return num*factorial(num-1);
                return arguments.callee(num-1);
            }
        }

        this
            ......
    函数的属性和方法
        函数也有属性和方法。每一个函数都包含两属性:length和prototype
        其中length表示函数希望接收的命名参数的个数
            function a(a,b,c){

            }
            alert(a.length);    //3
        在创建自定义引用类型以及实现继承时,prototype属性极为重要的。每个函数都包含两个非继承而来的方法:apply()和call()
        这两个方法是在特定的作用域中调用函数。实际上等于设置函数体内this对象的值。
        apply()方法接收两个参数,一个是运行环境作用域,另一个是参数数组,第二个参数可以 是array的实例,也可以是arguments对象
            function sum(num1,num2){
                return num1+num2;
            }
            function callsum1(num1,num2){
                return sum.apply(this,arguments);
            }
            function callsum1(num1,num2){
                return sum.apply(this,[num1,num2]);
            }
        call();的方法和apply()的方法相同,只是接收参数方式不同
            function sum(num1,num2){
                return num1+num2;
            }
            function callsum1(num1,num2){
                return sum.call(this,num1,num2);
            }

    基本包装类型
        引用类型与基本包装类型的主要区别就是对象的生存期

        bollean类型
            。。。。。

        Number类型
            。。。。。

        String类型
            字符方法
                charAt()
                charCodeAt();
            字符串操作方法
                concat();
                slice();
                substr()
                substring()
            字符串位置方法
                indexOf()
                lasetIndexOf();
            字符串大小写方法
                toLowerCase()
                toLocaleLowerCase()
                toUpperCase()
                toLocaleUpperCase()
            字符串的模式匹配方法
                match()
                exec()
                search()
                replace()
            localeCompare()方法:比较两字符串
                如果字符串在字母表中应该排在字符串参数之前,则返回一个负数(-1);
                如果字符串在字母表中等于字符串参数,则返回一个数(0);
                如果字符串在字母表中应该排在字符串参数之后,则返回一个负数(1);
            fromCharCode()方法:
                接收一个或者多个字符编码,然后将它们转换成字符串,类似于charCodeAt()的相反操作
                alert(String.fromCharCode(104,333,233));
            HTML方法
                anchor(name)        <a name='name'></a>
                big()            <big></big>
                bold()            <b></b>
                fixed()            <tt></tt>
                fontcolor(color)    <font color='color'></font>
                fontsize(size)        <font size='size'></font>
                italics()        <i></i>
                link(url)        <a href='url'></a>
                small()            <small></small>
                strike()        <strike></strike>
                sub()            <sub></sub>
                sup()            <sup></sup>

内置对象
    global对象
        URI编码方式    URI(uiform resource identifiers,通用资源标识符)
            enCodeURI()和encodeURIComponent() (更多使用encodeURIComponent替换所有非数字字母字符)
        eval()方法
            。。。。。。
        global对象的属性
            undefined
            NaN
            Infinity
            Object
            Array
            Function
            Bollean
            String
            Number
            Date
            RegExp
            Error
            EvalError
            RangeError
            ReferenceError
            SyntaxError
            TypeError
            URIError
        window对象
            web浏览器都是将这个全局对象作为window对象的一部分加以实现的因此在全局作用域中声明的所有 变量和函数,就都成为了window对象的属性
            var color='red';

            function sayColor(){
                alert(window.color);
            }
            window.sayColro();//red;
        Math对象
            对象属性
                Math.E
                Math.LN10
                Math.LN2
                Math.LOG2E
                Math.LOG10E
                Math.PI
                Math.SQRT1_2
                MATH.SQRT2
            min(),max()
            舍入方法
                Math.ceil()    向上舍入
                Math.round()    标准舍入
                Math.floor()    向下舍入
            random()方法
                值 = Math.floor(Math.random()*可能值的总数+第一个可能的值)
            其它方法
                Math.abs()
                Math.exp()
                Math.log()
                Math.pow()
                Math.sqrt()
                Math.acos()
                Math.asin()
                Math.atan()
                Math.atan2()
                Math.cos()
                Math.sin()
                Math.tan()

原文链接:js引用类型篇,转载请注明来源!

0