JS对象

目录

Object

1.分类

1)内建对象:

2)宿主对象:

3)自定义对象:

2.基本操作

1)创建对象:var 对象名 = new Object();

2)向对象添加属性:对象.属性名 = 属性值;

3)读取属性:对象.属性名

4)修改属性值:对象.属性名 = 新值

5)删除属性值:delete 对象.属性名

3.注意

1)属性名

2)属性值

3)  栈内存、堆内存

4.对象字面量

5.函数

1)创造函数对象

2)函数的参数

3)返回值

4)立即执行函数

5)方法

6)枚举对象中的属性


Object

当不属于5种基本数据类型时,都是对象Object

基本数据类型都是单一的值,值和值之间没有任何联系

在JS中如果使用基本数据类型的数据,我们所创造的变量都是独立的,不能成为一个整体

对象属于一种复合数据类型,在对象中可以保存多个不同数据类型的属性


1.分类

1)内建对象:

由ES标准中定义的对象,在任何的ES的实现中都可以使用

               比如:Math String Number Boolean Function Object... 

2)宿主对象:

由JS的运行环境提供的对象,目前来说主要指浏览器提供的对象

               比如:BOM DOM(两组对象)

3)自定义对象:

由开发人员自己创建的对象


2.基本操作

1)创建对象:var 对象名 = new Object();

    使用new关键字调用的函数,是构造函数constructor,构造函数是专门用来创建对象的函数

    使用typeof检查一个对象时,会返object(null也会)

    在对象中保存的值称为属性

    

2)向对象添加属性:对象.属性名 = 属性值;

var obj = new Object();

obj.name = "孙悟空";

obj.gender = "男";

 

3)读取属性:对象.属性名

    如果读取对象中没有的属性,不会报错而是会返回undefined

    console.log(obj.name);

 

4)修改属性值:对象.属性名 = 新值

    obj.name = "tom";

 

5)删除属性值:delete 对象.属性名

    delete obj.name;


3.注意

1)属性名

    对象的属性名不强制要求遵守标识符的规范,但使用时尽量按照标识符的规范

    如果使用特殊属性名,不能采用.的方式操作,需要使用(对象["属性名"] = 属性值)的方式,读取也采用这种方式

    使用[]的形式操作属性更加灵活,在[]中可以直接传递一个变量,这样变量值是多少就会去读取那个属性

    obj["123"] = 789;

    console.log(obj["123"]);

    var n = "123";

    console.log(obj[n]);

 

2)属性值

    JS的属性值可以是任意的数据类型,甚至也可以是一个对象

    var obj2 = new Object();

    obj2.name = "jone";

    obj.test = obj2;

    console.log(obj.test.name);

 

    in 运算符:"属性名" in 对象名

    可以检查一个对象中是否含有指定的属性,如果有则返回ture,没有则返回false

    console.log("test" in obj);

 

3)  栈内存、堆内存

  • 基本数据类型:String Number Null Boolean Undefined

    修改变量不影响另一个变量

    var a = 123;

    var b = a ;

    a++;

    console.log("a =" +a);  //124

    console.log("b =" +b);  //123

 

  • 引用数据类型:Object

    修改一个变量影响另一个

    var obj = new Object();

    obj.name = "tom";

    var obj2 = obj;

    obj.name = "jone";

    console.log(obj.name);  //jone

    console.log(obj2.name); //jone

 

  • 栈内存、堆内存

    JS中的变量都保存在栈内存中(变量名+值

    基本数据类型的值直接在栈内存中保存(变量定义时会给它赋给一个地址)

               值与值之间独立存在,修改一个变量不会影响其他变量

    对象是保存在堆内存之中的,每创建一个新的对象,就会在栈内存和堆内存中分别开辟出一个新的空间

        而变量保存的是内存地址(对象的引用,栈地址中保存:变量名+地址)

        如果两个变量保存的是同一个对象的引用,当通过一个变量修改属性时,另一个变量也会受到影响

        修改变量的值时,其他的对象不受影响

 

  • 比较

    当比较两个基本数据类型的值时,就是比较值

    而比较两个引用数据类型时,他是比较的对象的内存地址

                            如果两个对象一模一样,但内存地址值也不一样,也会返回false


4.对象字面量

    创建一个对象:var obj = new Object();

    使用对象字面量来创建一个对象: var obj ={};

                 可以直接在创建对象时,直接指定对象中的属性;属性名可加引号可不加

                 如果使用特殊名字,则必须加引号

 

                 属性名和属性值时一组一组的名值对结构

                 名和值之间使用:连接,多个名值对之间使用,隔开

                 如果一个属性之后没有其他的属性了,就不要写,

                 属性可以嵌套

 

                 {属性名:属性值,...}

 var obj ={name:"jone",

           age:28,

           test:{name:"tom"}

           };

5.函数

    也是一个对象(除了基本数据类型都是对象)

    可以封装一些功能(代码),在需要时可以执行这些功能(代码)

    使用typeof检查一个函数对象时,会返回Function

 

1)创造函数对象

  • 构造函数

    在实际开发中很少使用构造函数来创造函数对象

    创建一个函数对象(可以将要封装的代码以字符串的形式传递给构造函数)

  var fun = new Function("console.log('hello');");

    封装到函数中的代码不会立即执行,会在调用后执行

    调用语法:函数对象()

    当调用函数时,函数中封装的代码会按照顺序执行

    fun();
  • 使用函数声明来创建一个对象

    语法:

    function 函数名([形参1,形参2...形参n]){

        语句...

    }

    function fun2(){

        console.log("hello");

        console.log("world");

    }

    fun2();

 

  • 使用函数表达式来创建一个函数(将一个匿名函数赋给一个变量,记得加;)

    var 函数名 = function([形参1,形参2...形参n]){

        语句...

       };


2)函数的参数

  • 形参

    定义一个求两个数的和的函数

    可以在函数的()中来指定一个或多个形参(形式参数)

    多个形参之间使用(,)隔开,声明形参就相当于在函数内部声明了对应的变量,但并不赋值

    在调用函数时给形参传值

    调用函数时解析器不会检查实参的类型,

    所以要注意是否有可能会接受到非法的参数,如果有可能则需要对形参进行类型的检查

    function sum(a,b){

        console.log(a+b);

    }

    function(2,3);

    调用函数时,解析器不会检查实参的数量,多余的实参不会被赋值

    如果实参的数量少于形参的数量,则没有对应实参的形参将是undefined


  • 实参

    实参可以是任何值

    创建一个函数,可以在控制台中输出一个人的信息:name age gender address

    function sayHello(name,age,gender,address){

        console.log("我是"+"孙悟空"+",年龄"+18+...);

    }

    sayHello("孙悟空",18,"男","花果山");

    当参数过多时可以将参数封装到一个对象中,然后通过一个对象传播

    function sayHello(o){

        console.log("我是"+o.name+",年龄"+o.age+...);

    }

    var obj ={

        name:"tom",

        age:18,

        gender:"famale",

        address:"California"        

    }

    sayHello(obj);

    实参可以是一个对象,也可以是一个函数

    function fun(a){

        console.log("a ="+a);

    }

    fun(sayHello);//sayHello函数体
    function fun(a){

        a(obj);

    }

    fun(sayHello);//调用a等同于调用sayHello

 

    fun(function(){alert("hello")});

    //将一个函数作为实参传给匿名函数

   // fun(mianji(10));→a = 314;

    mianji()

        调用函数

        相当于使用的是函数的返回值

    mianji 

        函数对象

        相当于直接使用的函数对象(带函数体)


3)返回值

    可以使用return来设置函数的返回值

    return 值

    return后的值将会作为函数的执行结果返回,可以定义一个变量接收该结果

    function sum(a,b,c){

        var d = a + b + c;

        return d;

    }

    return后的值都不会执行

    如果return后不跟值就相当于返回undefined

    如果函数中不写return,也会返回undefined

 

    return

    使用break可以退出当前循环

    使用continue可以退出当次循环

    使用return可以退出当前整个函数

 

    可以return任意类型的值,也可以是一个对象

    function fun2(){

        var obj = {name:"沙和尚"};

        return obj;

    }

    var a = fun2();

    console.log("a = "+a.name);

    

    //函数内部可以再声明(和调用)一个函数

    function fun3(){

        function fun4(){

            alert("我是fun4");

        }

        //将fun4函数对象(带函数体)作为返回值返回

        return fun4;

    }

    fun3();

 

    练习:定义一个函数,判断一个数字是否是偶数,如果是则返回ture,否则返回false

    function isou(num){

        return num % 2 == 0;

    }

    var result = isou(15);

 

4)立即执行函数

    函数定义完立即被调用

    可调用且传参

    (function(){

        alert("匿名函数");

    })();

    (function(a,b){

        console.log("a = "+a);

        console.log("b = "+b);

    })(123,456);

5)方法

    函数可以作为对象的属性,此时它被称为这个对象的方法

    调用这个函数时就说调用对象的方法(method)

    但它只是名称上的区别,没有其他区分

    var obj = new Object();

    obj.name = "ton";

    obj.age = 18;

    obj.sayName = function(){

        console.log(obj.name);

    }

    obj.sayName();//ton



    var obj2 = {

        name :"Jim",

        age:18,

        sayName:function(){

            console.log(obj2.name);

        }

    };

    obj2.sayName();

 

6)枚举对象中的属性

    使用for...in 语句

    for (var 变量 in 对象){

    ...

    }

    for...in语句 对象中有几个属性,循环体就会执行几次

    每次执行时会将对象中的一个属性的名字赋值给变量

    for(var n in obj){

        console.log("输出属性名 : "+n);

        console.log("输出属性值 : "+obj[n]);

    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值