JavaScript对象与内置对象——对象(一)

对象

对象

对象是一个具体的事物

在JavaScript中,对象是一组无序的相关属性和方法的集合,所有的事物都是对象,例如字符串,数值,数组,函数等

对象由属性和方法组成的

  • 属性:事物的特征,在对象中用属性来表示(常用名词)
  • 方法:事物的行为,在对象中用方法来表示(常用动词)

保存一个值时,可以使用变量,保存多个值(一组值)时,可以使用数组.

为什么使用对象?

对象的结构相比于数组更加清晰和简单

对象的特点

  1. 对象属于复杂数据类型,即引用数据类型
  2. 在存储变量时,存储时,变量中存储的仅仅是地址,放在堆中;其具体的值放在栈中,并指向堆中的变量
  3. 传参过程是把堆地址传给不同的参数

创建对象的三种方式

利用字面量创建对象

对象字面量:就是花括号{}里面包含了表达这个具体事物(对象)的属性和方法

对象里面还可以放对象,对象里面还可以放方法

//利用字面量创建对象
        var obj = {}; //空对象

        var obj = {
            uname: '张三丰',
            age: 18,
            sex: '男',
            sayHi: function () {
                console.log('hi~');
            }
        }
        //(1)里面的属性或者方法我们采取键值对的形式 键 属性: 值(属性值)
        //(2)多个属性或者方法用逗号隔开
        //(3)方法冒号后面跟的是一个匿名函数

调用对象的属性

//采取 对象名.属性名
console.log(obj.sex);

//对象名['属性名']
console.log(obj['age']);

调用对象的方法

//对象名.方法名();
obj.sayHi();

变量和属性的异同

相同点:都是用来存储数据

区别:

变量属性
单独声明并赋值,使用的时候直接写变量名,单独存在在对象里面的称为属性,不需要声明,使用的时候必须是对象.属性

函数是单独声明的,并且调用的 函数名() 单独存在

方法在对象里面调用的时候 对象.方法()

利用new Object创建对象

var obj = new Object(); //创建一个空对象
        obj.name = 'q';
        obj.age = 18;
        obj.sex = '男';
        obj.sayHi = function() {
            console.log('sayHi~');
        };
        console.log(obj);

利用构造函数创建对象

优点在于可以利用方法批量创建某一类对象

因为我们前面两种创建对象的方式一次只能创建一个对象

构造函数:是一种特殊的函数,主要用来初始化对象,即为对象成员变量赋初始值,它总与 new 运算符一起使用。我们可以把对象中一些公共的属性和方法抽取出来,然后封装到这个函数里面。

构造函数用于创建某一类对象,其首字母要大写

构造函数要和new一起使用才有意义

//声明构造函数
function 构造函数名() {
    this.属性 =;
    this.方法 = function() {};
}
new 构造函数名();
-----------------------------------------------
function Star(name, age, sex) {
    this.name = name;
    this.age = age;
    this.sex = sex;
    this.sing = function(song) {
                console.log(song);
           		 };
}
var ldh = new Star('刘德华', 18, '男');
ldh.sing('冰雨');
console.log(ldh.name);

1.构造函数名字首字母必须要大写字母

2.构造函数不需要return就可以返回结果

3.调用构造函数必须使用new

4.只要 new

new关键字

  1. 在内存中创建一个新的空对象
  2. 让 this 指向这个新的对象
  3. 执行构造函数里面的代码,给这个新对象添加属性和方法
  4. 返回这个新对象(所以构造函数里面不需要return)

遍历对象属性

for…in 语句用于对数组或者对象的属性进行循环操作。

for (变量 in 对象名字) {
 // 在此执行代码
}
var obj = {
            name : 'pink',
            age : 18,
            sex : '男'
        }
        for (var k in obj ) {
            console.log(k);//属性名
            console.log(obj[k]);//obj[k]是属性值
        }

语法中的变量是自定义的,它需要符合命名规范,通常我们会将这个变量写为 k 或者 key

案例

/*
创建一个电脑对象
有颜色(color)、重量(weight)、品牌(brand)、型号(type)等属性,
有看电影(watch)、听音乐(listen)、打游戏(play)和敲代码(coding)等方法。
题目描述:
颜色、重量、品牌、型号是属性;看电影、听音乐、打游戏、敲代码是方法,在调用方法时分别打印 “我在看电影/听音乐/打游戏/敲代码”
*/

//函数创建方法
        function Computer(color, weight, brand, type) {
            this.color = color;
            this.weight = weight;
            this.brand = brand;
            this.type = type;
            this.fn = function () {
                console.log('我在看电影');
                console.log('我在听音乐');
                console.log('我在打游戏');
                console.log('我在敲代码');
            };
        }
        var c = new Computer('red', 180, 'abc', 1);
        console.log(c);
        c.fn();  //console.log(c.fn()); 会显示undefined

//字面量
        var c = {
            color: 'red',
            weight: 180,
            brand: 'abc',
            type: 1,
            fn: function () {
                console.log('我在看电影');
                console.log('我在听音乐');
                console.log('我在打游戏');
                console.log('我在敲代码');
            }
        }
        console.log(c);
        c.fn();

//new object
        var c = new Object();
        c.color = 'red';
        c.weight = 180;
        c.brand = 'abc';
        c.type = 1;
        c.fn = function () {
            console.log('我在看电影');
            console.log('我在听音乐');
            console.log('我在打游戏');
            console.log('我在敲代码');
        };
        console.log(c);
        c.fn();

//遍历下面对象
var dog = {
	dName:"coco",
	type:"阿拉斯加犬",
	age:"5岁",
	color:"棕红色"
};

//遍历对象
for (var k in dog) {
            console.log(dog[k]);
        }
//请描述下面代码的输出结果以及运行原因

var num = 1;
function demo(){
    console.log(num);
    function demoSon(){
        console.log(num);
        num = 3;
        console.log(num);
    }
    var num = 2
    demoSon();
}
demo();


//变量提升 函数提升 局部变量 全局变量 作用域链 变量定义
var num; //变量提升
        function demo() { //函数提升
            var num; //变量提升
            function demoSon() {    //函数提升
                console.log(num);   //2    2
                num = 3;    //全局变量
                console.log(num);   //3     3
            }
            console.log(num); // undefined   1

            num = 2;
            demoSon();
        }
        num = 1;
        demo();
//输出结果 undefined 2 3
/*
请使用arguments完成函数getResult,实现得到输入的所有的数值中的最小值、最大值、平均数、总和等功能

作业描述:
	函数名:getResult
	函数调用方式:getResult(数值1,数值2,数值3,数值4.....)
	函数功能:返回值是一个对象,这个对象有sum, max, min, averages等属性,分别表示实参的总和、最大值、最小值、平均数等
*/

function getResult() {
    var sum = arguments[0];
    //计算sum
    for (var i = 1; i < arguments.length; i++) { //遍历数组,存入数值
        sum += arguments[i];
    }
    //计算max
    var max = arguments[0];
    for (var i = 1; i < arguments.length; i++) {
        if (arguments[i] > max) {
            max = arguments[i];
        }
    }
    //计算min
    var min = arguments[0];
    for (var i = 1; i < arguments.length; i++) {
        if (arguments[i] < min) {
            min = arguments[i];
        }
    }
    //计算avg
    avg = sum / arguments.length;
    //创建对象
    function Obj(sum, max, min, avg) {
        this.sum = sum;
        this.max = max;
        this.min = min;
        this.avg = avg;
    }
    //传入属性值给对象
    var arr = new Obj(sum, max, min, avg);
    return console.log(arr);
}
getResult(100, 2, 31, 42, 15, 56);
/*
以下有两个数组,一个数组arr是班级里所有的学员的名称,一个数组currentArr是提交了每日反馈的学员名单,请创建一种算法,把未提交每日反馈的学员筛选出来
*/
var arr = ["张瑞淑", "徐海涛", "谢岗岗", "薛鹏", "魏明杨", "党婷", "熊飞", "郑翠翠", "李航卫", "屈涛", "汪孝双", "代攀飞", "武志钰", "王亚龙", "周芙榕", "李涛", "郝颖", "文冲洋", "王旭拯", "胡佳豪", "寇晓丽", "马晓晗","王思聪", "张绿", "李德", "郑萍", "张凯", "张嘉成", "葛云侠", "杨磊", "任变", "景德", "高卷林", "刘益凡", "赵娜", "陈章鸣", "张荣召", "赵凯旋", "程倩倩", "脱朝平", "刘吉利", "郭苗苗", "马建峰", "潘瑞", "闫翔", "马晨", "李轩轩", "黄红梅", "刘书彬", "罗强", "刘东","王可可"  "陈泽文", "李嘉琪", "段佳琦", "黄燕", "邱淑鸿", "宋翔宇", "王波", "樊琳", "王兆国", "许成", "李兴"];

var currentArr = ["张瑞淑", "徐海涛", "谢岗岗", "薛鹏", "魏明杨", "党婷", "熊飞", "郑翠翠", "李航卫", "屈涛", "汪孝双", "代攀飞", "武志钰", "王亚龙", "周芙榕", "李涛", "郝颖", "文冲洋", "王旭拯", "胡佳豪", "寇晓丽", "马晓晗", "张绿", "李德","郑萍", "张凯", "张嘉成", "葛云侠", "杨磊", "任变", "景德", "高卷林", "刘益凡", "赵娜", "陈章鸣", "张荣召", "赵凯旋", "程倩倩", "脱朝平", "刘吉利", "郭苗苗", "马建峰", "潘瑞", "闫翔", "马晨", "李轩轩", "黄红梅", "刘书彬", "罗强", "刘东", "陈泽文", "李嘉琪", "段佳琦", "黄燕", "邱淑鸿", "宋翔宇", "王波", "樊琳", "王兆国", "许成", "李兴"];


function arrMath(arr, currentArr) {
    var newArr = [];//创建新数组
    var type = false;//默认为false,如果匹配不到则为true
    for (var i = 0; i < arr.length; i++) {
        for (var m = 0; m < currentArr.length; m++) {
            if (arr[i] == currentArr[m]) { //将arr和currentArr里面的每一个值进行比较
                type = false;//如果currentArr里面有值匹配,则输出false
                break;//如果匹配到,则跳出循环
            } else {
                type = true;
            }
        }
        if (type == true) {//循环完成后,将值还为true的,拿出来创建新数组
            newArr[newArr.length] = arr[i];
        }
    }
    return newArr;
}
var re = arrMath(arr, currentArr);
console.log(re);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值