JavaScript学习笔记(八)——JS中的对象

对象

JS就定义了一个对象数据结构 允许使用 key: value作为一组键值对
对象可以有多个key:value对组成

对象的使用

  • 对象: 是一组k:v对的集合。
  • 每一组k:v对,叫做对象的属性。
  • k表示对象的属性名
  • v表示对象的属性值。
  • 每一组k:v对,使用逗号隔开,推荐一行一个k:v对
  • k最好符合变量的命名规范(属性名必须是字符串 " ‘’、’ ',但是只要属性名是符合变量命名规则,那么可以省略双引号或者单引号)
  • v是具体的数据,可以是任何类型的数据。

定义对象:

  • 字面量 (推荐方式)
    var obj = {}; // 字面量定义对象

    // 定义对象并设置属性
    var obj1 = {
        name: "张三"
    };
  • 构造函数
    var obj = new Object();
  • 构造函数
    var obj = Object();

对象的属性操作:

  • 读取属性
    点语法
    var obj = {
        name: "张三"
    }
    console.log(obj.name); // 张三

方括号语法

    var obj = {
        name: "张三"
    }
    console.log(obj["name"]); // 张三
  • 设置属性
    点语法
    var obj = {
        name: "张三"
    }
    obj.age = 12;
    console.log(obj); // {name: "张三", age: 12}

方括号语法

    var obj = {
        name: "张三"
    }
    obj["age"] = 13;
    console.log(obj); // {name: "张三", age: 13}

注意: 点语法 是 方括号语法 的简写,但是属性名必须符合变量名规则,当不符合时,使用点语法会报错,只能使用方括号语法

  • 删除属性
    delete关键字,该关键字只能用来删除对象的属性,而不可以用来删除变量
    var obj = {
        name: "张三"
    }
    delete obj["name"];
    console.log(obj); // {} 

对象的循环遍历

语法:

for (var i in obj) {} 

实例:

    var obj = {
        name: "小明",
        age: 13,
        sex: "男",
        married: false
    }
    // 使用for in 循环遍历对象
    for (var k in obj) {
        // k 是对象的属性名 
        // obj[i] 是对象的属性值
    }

注意: obj.i 这种方式,是真的在读取 obj的 k 这个属性,而不是读取i变量所保存的值属性

方括号语法与点语法的区别

  • 方括号语法

    • [] 之间是一个JS的执行环境,可以使用变量,表达式
    • [] 最终需要的是一个字符串,如果不是字符串,会转为字符串(调用toString方法)
    • [] 只要内容是字符串,不论是否符合变量命名规范,都可以成功
  • 点语法

    • 点语法,点什么,就是什么
    • 点语法,必须符合变量的命名规范
    var a = "name";
    var obj = {
        name: "张三",
        a: 123
    }
    // 点语法:
    console.log(obj.name); // "张三"
    console.log(obj.a); // 123
    // 方括号语法:
    console.log(obj[a]); // "张三"
    console.log(obj["a"]); // 123

请实现函数copy,接收一个参数,参数是对象。该函数返回一个新对象,该新对象拥有与传递对象完全一致的属性和属性值。

        var obj = {
            name: "张三", 
            age: 22,
            sex: "男",
            married: false
        }
        function copy(){
            var obj1 = {};
            for (var key in obj){
                obj1[key] = obj[key];
            }
            console.log(obj1);
            console.log(obj === obj1); // false表示成功复制,但是两个是指向不同的地址,是两个不同的对象

        }
        copy(obj);

在这里插入图片描述

有数组如下 [{name: “张三”, year: 13}, {name: “李四”, year: 14}, {name: “王五”, year: 15}]
编写一段程序,得到 {张三: 13, 李四: 14, 王五: 15}

        var arr = [{name: "张三", year: 13}, {name: "李四", year: 14}, {"name": "王五", year: 15}];
        var arr1 = {};
        for (var key in arr){
            arr1[arr[key]["name"]] = arr[key]["year"];
        }
        console.log(arr1);

在这里插入图片描述
统计字符串中每个字符的个数

    var str = "abcd.acbabc.bababc  babc abdiawe你好,你们好!fioewafmklsdnvklsnaaeofihoai";
    var newStr = ""; // 用来存放经过去重之后的字符
    var obj = {};
    // 将原字符串中每一个字符都遍历出来
    for (var i = 0; i < str.length; i++){
        // console.log(str[i]);
        // 去重:判断遍历出来的字符与字符串newStr内的字符是否匹配,若匹配则不再存入newStr,-1表示不匹配
        if(newStr.indexOf(str[i]) == -1){
            // 将不匹配的(也就是newStr里面还没有的字符,但str里面有的字符)存入newStr
            newStr += str[i];
        }
    }
    // console.log(newStr);
    // 遍历newStr中每一个字符
    for (i = 0; i < newStr.length; i++){
        var count = 0; // 记录每一个字符在str中出现的次数,为什么要在这里定义变量并赋值为0呢,因为计算完上一个字符出现的次数后,下一个字符的出现次数要重新开始计算
        // 遍历str中每一个字符
        for (j = 0; j < str.length; j++){
            // 如果str中下标为j的字符与newStr中下标为i的字符匹配,出现的次数将+1
            if(newStr[i] === str[j]){
                count++;
            }
        }
        // console.log(newStr[i],count);
        // 将每一个不同的字符当做对象的一个属性名,将每一个不同的字符出现的次数当做对应的属性名的属性值
        obj[newStr[i]] = count;
    }
    console.log(obj);

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值