万年荔枝 2022-03-24 18:56 采纳率: 60%
浏览 42
已结题

JavaScript中indexOf()的使用规范

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

写的代码是想把一段字符串中的字母,不重复地添加到一个新数组中,
使用indexOf(),是想判断某个字符是否已存在于新数组中。

问题相关代码

问题代码:

var str = 'abcoefoxyozzopp';
var arr = [];
var p;
for (var i = 0; i <= str.length; i++) {
    p = str.charAt(i);
    if (arr.indexOf(p) === -1) {
        arr = arr.push(p);
    }
}
运行结果及报错内容

img

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

首先我根据报错内容尝试了用函数封装(虽然我也不知道为什么需要这样),并且改了一些命名:

function add(str) {
    var arr = [];
    var letter;
    for (var i = 0; i < str.length; i++) {
        letter = str.charAt(i);
        if (arr.indexOf(letter) === -1) {
            arr.push(letter);
        }
    }
    return arr;
}
var str = add('abcoefoxyozzopp');
console.log(str);

结果成功了:
Array(10) [ "a", "b", "c", "o", "e", "f", "x", "y", "z", "p" ]

之后我又试了一下不封装函数,只改命名,也成功了。

var str = 'abcoefoxyozzopp';
var arr = [];
var letter;
for (var i = 0; i < str.length; i++) {
    letter = str.charAt(i);
    if (arr.indexOf(letter) === -1) {
        arr.push(letter);
    }
}
console.log(arr);

百思不得其解,最后我一 一对照,发现是第七行造成的差异。

arr = arr.push(letter);
//报错

arr.push(letter);
//不报错

我想问的就是,为什么第七行的差异会影响第六行;还有为什么报错内容会是“is not a function”。

  • 写回答

4条回答 默认 最新

  • 关注

    因为push()是直接修改原数组, 不是返回新的数组
    push()的返回值是添加元素之后数组的长度

    var arr = ["a","b"];
    arr = arr.push("c");
    console.log(arr); //输出数组长度3
    

    这时arr 是数值类型
    数值类型没有 indexOf() 方法, 访问arr.indexOf会返回 undefined
    你下次循环调用 arr.indexOf() 就等于是调用undefined()
    undefined 不是一个函数, 不能在之后加()调用,就会报错“arr.indexOf is not a function”。
    意思就是 arr.indexOf 不是一个函数

    如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 4月2日
  • 已采纳回答 3月25日
  • 创建了问题 3月24日

悬赏问题

  • ¥120 计算机网络的新校区组网设计
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?