JS 对象属性访问的2种方式和用途

本文介绍了一种使用JavaScript对象来统计字符串中每个字符出现次数的方法。通过遍历字符串并利用对象的两种属性访问方式,实现了对字符出现次数的有效记录。文章还对比了不同属性访问方式在动态创建属性时的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题起源:
在学习JS的过程中遇到一道题目“判断一个字符串中出现次数最多的字符,统计这个次数”,在网上查到一个用对象的方法解题,看完表示一脸懵逼。对代码中o[char]不能理解。

代码如下:

<script>
    var str = "zhaochucichuzuiduodezifu";
    var o = {};
    for (var i = 0, length = str.length; i < length; i++) {
//        var char = str[i];
        var char = str.charAt(i);
        if (o[char]) {  //char就是对象o的一个属性,o[char]是属性值,o[char]控制出现的次数
            o[char]++;  //次数加1
        } else {
            o[char] = 1;    //若第一次出现,次数记为1
        }
    }
    console.log(o);   //输出的是完整的对象,记录着每一个字符及其出现的次数
    //遍历对象,找到出现次数最多的字符和次数
    var max = 0;
    var maxChar = null;
    for (var key in o) {
        if (max < o[key]) {
            max = o[key];   //max始终储存次数最大的那个
            maxChar = key;  //那么对应的字符就是当前的key
        }
    }
    console.log("最多的字符是" + maxChar);
    console.log("出现的次数是" + max);
</script>

原网址:js–找字符串中出现最多的字符


后来在一个网页中查到,原来对象访问属性有两种方式。有一个对象Obj = {"Name":"Langshen","AGE":"28"}

  1. 用点访问,Obj.Name ;
  2. 用中括号访问,Obj["Name"];
  3. 上述两种方式得到的结果都是属性Name的值Langshen;

上面2中访问的方式可以获得同样的效果,是因为对象的属性是已经存在的,这里在延伸一下上述两种方式为对象新建属性时用法的区别。

首先,回到文章的开头。代码o[char] 表示的是o对象的一个属性值。那能不能用o.char表示呢?答案是否定的

原因是:
- 用o[char] 时,char(var char = str.charAt(i))这个变量是变化的。
- 当i = 0; ,o[char]o.z 是等效的。表示为o对象创建了z属性。
- 当i = 1; ,o[char]o.h 是等效的。表示为o对象创建了h属性。
- 所以最后得到的对象为:o{z: 3, h: 3, a: 1, o: 2, c: 3},str中有多少种不同的字母,就给o对象创建了多少个属性。当然属性第1次创建是是空值,得到的布尔值是false。,后面赋值为1后,则布尔值转变为true,即完成了计数功能。
- 若将o[char]替换为o.char,最后得到的o{char:24}只有一个char属性,它的值就是str字符串的长度,无法实现我们的要求。


总结:

  1. 在引用已有的对象属性时,并有属性名的情况下,用点和中括号是一样的;若属性是数组或者是对象,没有属性名,则要用类似数组元素引用的方式,用中括号+下标。例子参考;
  2. 在创建函数属性的时候,若属性名是已知的。用点和中括的的方式一样。若属性名是一组变量,则只能用中括号表示。中括号的灵活应用可以让代码变的很强大。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值