自学内容网 自学内容网

【Javascript Day9】对象定义、数组中对象元素排序、对象在内存中存储方法、对象构建联系

目录

 . 取值运算符 => 用于对象属性或方法的调用操作

[] 取值运算符 => 可用于数组下标或者对象属性的取值操作

数组对象的排序

对象在内存中存储方式

对象的三种定义方式

1. 字面量对象

2. 基于Object构造对象

3. 自定义对象构造器创建对象

对象的构建练习


 . 取值运算符 => 用于对象属性或方法的调用操作

        console.log( person.cardNo );
        console.log( person.phone );
        console.log( person.age );
        console.log( person.name );
        console.log( person.sex );
        // 对象调对象方法后,可以直接通过 () 执行方法
        person.say();

        console.log("----------------------");
        

        var person1 = {
            // 对象属性
            cardNo:"43234234234234234",
            phone:"435345344",
            age:32,
            sex:"男",
            name:"张三1",
            // 对象方法
            say:function(){
                console.log("对象方法");
            }
        }
        console.log( person1.name );

[] 取值运算符 => 可用于数组下标或者对象属性的取值操作

        //                1. [] 取数组元素 -> [下标]
        //                2. [] 取对象属性 -> ['属性名']  ["属性名"]
        console.log( person1[ 'cardNo' ] );

        // [] 取值运算符 的对象动态取值
        var key = "cardNo"
        // []中的属性名没有被引号报告,js会认为是变量
        // console.log( person1[ cardNo ] ); 
        // [] 中的变量如果对应的值,正好是对象中一个属性名,依然可以获取对象属性值
        console.log( person1[ key ] );
        key = "sex";
        console.log( person1[ key ] );
        
        // 对象循环:使用 for(var 变量名 in 被循环变量){} 循环

//        1. 循环的是对象,var 变量名 记录的是循环过程中,依次的对象属性名
        for (var key in person1) {
            console.log("for……in:",key, person1[ key ] );
            
        }

 //        2. 循环数组,var 变量名 记录的是循环过程中,依次的数组元素下标
        var nums = [11,22,33,44,55,66];
        for (var index in nums) {
            console.log("for……in:",index, nums[ index ] );
        }


数组对象的排序


按照对象中source大小来排序数组对象元素然后输出 

var students = [
            {
                name:"Jeanne",
                source:67
            },
            {
                name:"Fredrick",
                source:78
            },
            {
                name:"Kimberly",
                source:56
            },
            {
                name:"Mackenzie",
                source:91
            }
        ]
        
        for (var i = 0; i < students.length; i++) {
            for (var j = 0; j < students.length - 1 -i; j++) {
                if( students[j].source > students[j+1].source ){
                    var temp = students[j];
                    students[j] = students[j+1];
                    students[j+1] = temp;
                }
            }
        }
        

        for (var i in students) {
            console.log( students[i]["name"],students[i].source );
            
        }

对象在内存中存储方式

// 1. 基本数据类型(简单数据类型)
        //      String Number Boolean null undefined
// 2. 复杂数据类型(引用数据类型)
        //      Array 数组 
        //      Object 对象

        // 对象在内存中存储分为两个部分
        //      对象变量名和指向地址存在在 栈中
        //      对象的值存在堆中

        var user = {
            name:"tom",
            age:23
        }

        // 引用赋值 = 赋值的是栈中的地址
        var user1 = user;

        user1.name = "jack";
        console.log( user,user1 );
        

        function setParams(obj){
            obj.a = 999;
        }

        var obj = {
            a:1
        }
        setParams(obj)
        console.log(obj);

对象的三种定义方式

1. 字面量对象


        /*
            对象构建也被叫做 键值对 对象定义
            var 对象变量 = {
                属性名:属性值,
                key:value,
                ……
            }
        */
        var user = {
            name:"tom",
            say:function(){
                console.log(say);
            }
        }
        console.log( typeof user );
        

2. 基于Object构造对象


        //    Object 是JS提供的一个对象默认构造器
        //    + 构造器 => 对象创建的方法 => 被叫做构造方法
        //    !! 普通方法通过 普通方法() 调用
        //    !! 构造方法通过 new 构造方法名() 调用
        /*
        var 对象名 = new Object();
        */       
        var stu = new Object();
        console.log( typeof stu );
        // 构造器构成对象默认是空对象
        console.log( stu );
        // 构建的空对象可以通过 对象属性、对象方法 调用方式进行赋值
        //  对象属性操作,
        //      如果属性、方法 存在 属于赋值、取值、调用
        //      如果属性、方法 不存在 会进行创建,后续操作依然是赋值、取值、调用
        console.log( stu.name ); // 对象中不存在改属性,返回 undefined
        stu.name = "张三";
        console.log( stu );

        stu.show = function(){
            console.log("对象方法");
        }
        stu.show();
       

3. 自定义对象构造器创建对象


        //     + 构造器的定义语法和方法定义语法是一致
        //     + js function 关键字存在二义性

        // 程序语法:对应语言严格要求的语法格式 => 程序报错
        // 约定语法:程序员之间一种默契代码书写格式 => 不影响程序运行
        //    约定语法中:JS的 构造函数 首字目 大写
        function Person( name,age,sex ){
            // this 是  内置的 构造关键字 ,关键字用于指代创建的对象
            // console.log( this );
            this.name = name;
            this.age = age;
            this.sex = sex
            
        }

        var person1 = new Person("张三",23,"男");
        console.log(person1,typeof person1);

        var person2 = new Person("韩梅梅",33,"女");
        console.log(person2,typeof person2);

        var person3 = new Person("豆豆",33,"男");
        console.log(person3,typeof person3);

对象的构建练习

 

// 定义一个学生数组,要求循环录入4个学生,学生信息包含名称和成绩,录入完成后循环打印
        var stus = [];
        for (var i = 0; i < 4; i++) {
            var name = prompt(`请输入第${i+1}个学生的姓名`)
            var source = prompt(`请输入第${i+1}个学生的成绩`)
            // var temp = {
            //     name:name,
            //     source:source
            // }
            // stus.push( temp );
            stus.push( {
                stuname:name,
                source:source
            } )
        }

        for (var i in stus) {
            console.log(`姓名:${stus[i].stuname},成绩:${stus[i].source}`);
            
        }


原文地址:https://blog.csdn.net/clp20031101/article/details/145187683

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!