Java中数组与对象的实例化。数组何时是对象,什么时候获取数组的方法?

时间:2019-05-31 15:17:04

标签: javascript arrays reactjs javascript-objects instantiation

我在C / C ++ / PIC汇编和VHDL方面有一些经验,但是完全不了解JavaScript。我正在React中构建一个单页面应用程序,但是这个问题比解决一个问题(因为我已经找到了问题)更能增进我的理解。

我的问题是,在Javascript中,什么时候变量是数组,什么时候是对象?我该如何区分? (鉴于“ typeof”始终表示对象)。

万一它对某人有所帮助,我的最初问题是在我的状态下,我有一个对象数组,我需要长度。我试图用Array.length()来获取它,但是它应该是Array.length。在弄清楚这一点之前,我浪费了30分钟,我提出了更多的问题。

这是我的构造函数:

constructor(props, context) {
        super(props, context);

        this.state = {
            activeItem: 'home',
            currentSections: [ { key: 'Home', content: 'Home', link: true } ]
        };

        this.handleItemClick = this.handleItemClick.bind(this);
        this.handleTabChange = this.handleTabChange.bind(this);
    }

对于上下文,我正在为应用程序构建面包屑跟踪。为了确定在添加新元素之前是否需要弹出数组的最后一个元素,我需要使用currentSections数组的长度。

handleTabChange = (e, data) => {

        let newSections = [];

        newSections = this.state.currentSections;
        if (newSections.length() > 2) {
            newSections.pop();
        }

        let newSection = {
            key: data.panes[data.activeIndex].name,
            content: data.panes[data.activeIndex].menuItem,
            link: true
        };
        newSections.push(newSection);
                this.setState({currentSections: newSections});

    };

此代码产生错误: 未被捕获的TypeError:newSections.length不是函数

如果您因为遇到类似的问题而正在阅读本文,则问题在于newSections.length()应该为newSections.length。我恨我自己。在我弄清楚这一点之前,出于某种原因,我曾想过,当前状态为currentSections的数组实际上不是数组。是什么引起了我的问题,Java中的数组何时是数组?我会误会“ typeof”返回什么吗?

let newSections = [];
console.log(typeof newSections); //object
newSections = this.state.currentSections;
console.log(typeof newSections); //object
let newSections = [1,2,3];
console.log(typeof newSections); //object

我得到一个数组是一个对象,但是有没有办法判断一个变量是否被当作一个数组而不是一个普通对象呢?我找不到任何讨论的内容,但这可能是因为我没有要搜索的术语。

1 个答案:

答案 0 :(得分:1)

  

对象与数组之间的差异

     

尽管只是对象,但数组的行为非常   与常规对象不同。原因是Array.prototype   对象,其中包含所有Array个特定方法。每个新阵列   从Array.prototype继承这些额外的方法。

     

要注意的关键是,prototype属性的值   Array.prototypeObject.prototype。这意味着两件事:

     
      
  1. 数组只是对象,但是有一些额外的方法。
  2.   
  3. 对象无法执行数组无法执行的操作。
  4.   

阅读:https://www.frontendmayhem.com/javascript-arrays-objects/