2018-12-12

2018-12-12  本文已影响0人  废废_siri

引用数据类型

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


引用数据类型概念

对象(类型的值)是某个特定引用类型的实例。
构造函数原本是一个普通函数,只是出于创建新对象而定义了构造函数。在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>
上一篇下一篇

猜你喜欢

热点阅读