美文网首页
2018-12-12

2018-12-12

作者: 废废_siri | 来源:发表于2018-12-12 21:06 被阅读0次

    引用数据类型

    引用数据类型包括:对象、数组、函数。


    引用数据类型概念

    对象(类型的值)是某个特定引用类型的实例。
    构造函数原本是一个普通函数,只是出于创建新对象而定义了构造函数。在ECMAScript中本质上没有构造函数,只是函数的构造调用(new 构造函数名())。
    构造函数首字母一般大写。


    image.png

    新的实例对象会继承构造函数对象的方法与属性。如上面创建的obj对象会继承Object()函数的方法与属性。


    对象的分类

        对象的分类:
            1.内建对象
             - 由ES标准中定义的对象,在任何的ES的实现中都可以使用
             - 比如:Object Function Array Date Math String Number Boolean 
     
            2.宿主对象
             - 由JS的运行环境提供的对象,目前来讲主要指由浏览器提供的对象
             - 比如 BOM DOM
                        window.prompt()   //BOM提供的方法
                        document.wirte()  //DOM提供的方法
    
            3.自定义对象
             - 由开发人员自己创建的对象
    

    --
    自定义对象

    <script>
      
       // 在js中有个不成文的规定  首字母大写的函数 一般使用起来都是构造调用的
       var result = Object(); //普通函数调用      
       var obj = new Object(); //构造函数调用并创建obj对象
           obj={
               name:"siri",
               age:10
            }
            console.log(obj.name)
    </script>
    

    Object

    万物都是对象,函数也是对象。


    创建Object实例
    语法一:

    var obj = new Object();
    obj.name = "siri";
    obj.age = 20;
    

    语法二(字面量表示法):

    var obj={
    name:"siri",
    age:20
    }
    

    注:语法二是语法一的语法糖。

    --
    对象的属性值可以是一个对象。

    <script>
        //属性中还可以定义对象
        var obj={
            name:"sum",
            age:10,
            wife:{
                name:"siri",
                age:12,
            },
            sun:{
                name:'sumsiri',
                age:6
            }
        }
    </script>
    

    --
    对象的属性值可以是一个函数

    <script>
        //对象的属性值可以是一个函数
        var obj={
            test:function () {
                console.log("test")
            }
        }
        obj.test()
    
        var obj = new Object()
        console.log(typeof Object)      //Object的数据类型是function
                                        //obj的数据类型是object
    </script>
    

    对象属性的增删改查

    创建对象(create):

    var obj={};   //创建一个空对象create
    obj["name"]="siri";
    obj["age"]=11;
    

    删除属性delete

    delete obj["name"];
    console.log(obj["name"]);
    //删除后的属性的数据类型为undefined
    

    更新属性值update

    obj["name"]="sam";        //更新属性值update
    console.log(obj["name"]);
    

    读取属性值read

    console.log(obj["name"]) //读取属性值read
    

    语法糖

    既可以用对象.属性名为其设置属性值,也可以对象["属性名"]为其设置属性值。“对象.属性名”是“对象["属性名"]”的语法糖。

    <script>
        //创建并初始化对象
        var obj={
            name:"siri",
            age:18
        }
        //语法糖:对象.属性名
        console.log(obj.name);
    </script>
    

    in运算符

    <script>
        //in运算符--检查一个对象中是否含有指定的属性
        var obj={
            name:"siri",
            age:13
        }
        //"属性名" in 对象名
        console.log("name" in obj);
    </script>
    

    for in
    将对象的属性名遍历一遍。

      <script>
            var obj={
                name:"siri",
                age:20,
                weight:100,
                height:160
            }
    
            //for in将obj对象的属性名遍历一遍,而不是属性值
            for(var item in obj){
                console.log(item);
            }
    
        </script>
    

    数据存储位置

    基本数据类型的值存储在栈中,各自独立,而对象的值存储在堆中,每创建一个新对象就开辟一块新的内存空间,而变量保存的是对象的地址,当两个变量保存的是同一个对象的地址时,其中一个对象通过变量属性时,那么另一个也会受影响。


    image.png

    注:js中只有值传递,引用传递也就是地址值传递,不属于引用传递。


    Funciton

    用Function构造函数构造出来的实例对象会继承Function函数的属性与方法。函数是ECMAScript中的一等公民。


    创建Function实例

    var f  = new Function("x","y","return x+y;");
    //Function可以接收任意个参数,前面的参数是新函数枚举出的参数,最后一个参数会成为函数体。
    

    --
    函数声明

    <script>
        //函数声明
        function test(x,y){ //x,y为形参
            console.log(x+y)
        }
        test(1,5) //函数调用,1和5是实参
    </script>
    

    --
    函数表达式
    var f3=function(x,y){
    return x+y;
    }
    --
    立即可执行函数表达式
    (function(){})()
    --
    没有重载
    同名函数之间存在的是覆盖的关系,后面的覆盖前面定义的函数。

    <script>
        function test(a) {
            console.log(a)
        }
    
        //后面的函数会覆盖前面的函数,js中函数无重载,只匹配函数名,不匹配实参与形参的个数
        function test(a, b) {
            console.log(a, b)
        }
        test(1, 4, 5)
    </script>
    

    相关文章

      网友评论

          本文标题:2018-12-12

          本文链接:https://www.haomeiwen.com/subject/ovtphqtx.html