LESSLEMON 2022-04-26 15:45 采纳率: 50%
浏览 154
已结题

为什么 对象.字符串.charAt(i) 运行报错?

问题遇到的现象和发生背景

想要判断一个字符串中出现次数最多的字符,并统计其次数

问题相关代码,请勿粘贴截图

```javascript
        var obj = {};
        var str = 'abcoefoxyozzopp';
```        for (var i = 0; i < str.length; i++) {
            if (obj.str.charAt(i)) {
                //如果对象obj中存在当前从str中取出的值,那么为对象添加属性,为属性添加值
                obj.str.charAt(i) += 1;
            } else {
                obj.str.charAt(i) = 1;
                //obj.str.charAt(i)为什么会报错?????因为不能连续用两个点吗
            }
        }

        console.log(obj);


运行结果及报错内容

img

我的解答思路和尝试过的方法

将obj.(str.charAt(i))改为obj[str.charAt(i)]:

        var obj = {};
        var str = 'abcoefoxyozzopp';
        for (var i = 0; i < str.length; i++) {
            if (obj[str.charAt(i)]) {
                //如果对象obj中存在当前从str中取出的值,那么为对象添加属性,为属性添加值
                obj[str.charAt(i)] += 1;
            } else {
                obj[str.charAt(i)] = 1;
                //obj.(str.charAt(i))为什么会报错?????因为不能连续用两个点吗
            }
        }
        console.log(obj);


我想要达到的结果

结果已经正确显示,但是不知道原因,obj.str.charAt(i)这样的引用方式到底哪里不对?规范的写法应该是什么样子的

  • 写回答

1条回答 默认 最新

  • 一只成序源 2022-04-26 15:56
    关注

    第二种正确,第一种,obj.str就是undefined,undefined.charAt,铁定报错,if就报错了
    你可以理解为 "."是取值,“[]”是赋值
    程序从左到右执行,有括号先算括号的,
    这样你再看下第一个是不是有问题

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 5月4日
  • 已采纳回答 4月26日
  • 创建了问题 4月26日

悬赏问题

  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助
  • ¥15 STM32控制MAX7219问题求解答
  • ¥20 在本地部署CHATRWKV时遇到了AttributeError: 'str' object has no attribute 'requires_grad'