Javascript 对象数组上的长度属性未更新 两个问题考虑如下: //new obj var obj = {}; obj['cars'] = []; obj['cars']['toyota'] = 1; obj['cars']['mazda'] = 0; console.log(obj); console.log(JSON.stringify(obj));

Javascript 对象数组上的长度属性未更新 两个问题考虑如下: //new obj var obj = {}; obj['cars'] = []; obj['cars']['toyota'] = 1; obj['cars']['mazda'] = 0; console.log(obj); console.log(JSON.stringify(obj));,javascript,Javascript,为什么我的cars数组的长度为0?我必须手动更新length属性吗 为什么我的stringized对象中有参数时是空的?我假设它与length属性绑定在一起 Fiddle:car初始化为数组,但用作对象。并且对象没有长度属性 要获取对象的长度,可以执行̀̀̀̀object.keys(obj.length)(获取键列表,因为它是一个数组,所以它有一个长度) 但问题还在于,您将汽车初始化为数组,但将其用作对象 请参见此处的文档: 解决方案是将其初始化为对象: //new obj var obj

为什么我的cars数组的长度为0?我必须手动更新length属性吗

  • 为什么我的stringized对象中有参数时是空的?我假设它与length属性绑定在一起


  • Fiddle:

    car初始化为数组,但用作对象。并且对象没有长度属性

    要获取对象的长度,可以执行̀̀̀̀
    object.keys(obj.length)
    (获取键列表,因为它是一个数组,所以它有一个长度)

    但问题还在于,您将汽车初始化为数组,但将其用作对象

    请参见此处的文档:

    解决方案是将其初始化为对象

    //new obj
    
    var obj = {};
    obj['cars'] = {}; //And other object
    obj['cars']['toyota'] = 1;
    obj['cars']['mazda'] = 0;
    
    
    console.log(obj);
    console.log(JSON.stringify(obj));
    
    var obj = {};
    obj.cars = [];          // obj.cars is empty array
    obj.cars.toyota = 1;    // obj.cars is empty array with a new property toyota
    obj.cars.push('mazda'); // obj.cars is array with a new property toyota and one element mazda
    
    console.log(obj.cars instanceof Array,
                obj.cars.length,
                Object.keys(obj.cars)); // output: true 1 ["toyota"] 
    
    但如果您想要一个简单的数组:

    //new obj
    var obj = {};
    obj['cars'] = [];
    obj['cars'][1] = "toyota";
    obj['cars'][0] = "mazda";
    
    
    console.log(obj);
    console.log(JSON.stringify(obj));
    
    语法为̀
    array[identifier]=value
    (而不是数组[值]=标识符


    我已经更新了小提琴。

    汽车初始化为数组,但用作对象。并且对象没有长度属性

    要获取对象的长度,可以执行̀̀̀̀
    object.keys(obj.length)
    (获取键列表,因为它是一个数组,所以它有一个长度)

    但问题还在于,您将汽车初始化为数组,但将其用作对象

    请参见此处的文档:

    解决方案是将其初始化为对象

    //new obj
    
    var obj = {};
    obj['cars'] = {}; //And other object
    obj['cars']['toyota'] = 1;
    obj['cars']['mazda'] = 0;
    
    
    console.log(obj);
    console.log(JSON.stringify(obj));
    
    var obj = {};
    obj.cars = [];          // obj.cars is empty array
    obj.cars.toyota = 1;    // obj.cars is empty array with a new property toyota
    obj.cars.push('mazda'); // obj.cars is array with a new property toyota and one element mazda
    
    console.log(obj.cars instanceof Array,
                obj.cars.length,
                Object.keys(obj.cars)); // output: true 1 ["toyota"] 
    
    但如果您想要一个简单的数组:

    //new obj
    var obj = {};
    obj['cars'] = [];
    obj['cars'][1] = "toyota";
    obj['cars'][0] = "mazda";
    
    
    console.log(obj);
    console.log(JSON.stringify(obj));
    
    语法为̀
    array[identifier]=value
    (而不是数组[值]=标识符


    我已经更新了小提琴。

    你为什么不这样使用它

    var cars = [];
    cars.push({name:'toyota', value:1});
    cars.push({name:'mazda', value:0})
    

    你为什么不这样使用它

    var cars = [];
    cars.push({name:'toyota', value:1});
    cars.push({name:'mazda', value:0})
    

    obj.cars.length
    为0,因为您不推送数组中的新项,而是更改it属性:

    //new obj
    
    var obj = {};
    obj['cars'] = {}; //And other object
    obj['cars']['toyota'] = 1;
    obj['cars']['mazda'] = 0;
    
    
    console.log(obj);
    console.log(JSON.stringify(obj));
    
    var obj = {};
    obj.cars = [];          // obj.cars is empty array
    obj.cars.toyota = 1;    // obj.cars is empty array with a new property toyota
    obj.cars.push('mazda'); // obj.cars is array with a new property toyota and one element mazda
    
    console.log(obj.cars instanceof Array,
                obj.cars.length,
                Object.keys(obj.cars)); // output: true 1 ["toyota"] 
    

    obj.cars.length
    为0,因为您不推送数组中的新项,而是更改it属性:

    //new obj
    
    var obj = {};
    obj['cars'] = {}; //And other object
    obj['cars']['toyota'] = 1;
    obj['cars']['mazda'] = 0;
    
    
    console.log(obj);
    console.log(JSON.stringify(obj));
    
    var obj = {};
    obj.cars = [];          // obj.cars is empty array
    obj.cars.toyota = 1;    // obj.cars is empty array with a new property toyota
    obj.cars.push('mazda'); // obj.cars is array with a new property toyota and one element mazda
    
    console.log(obj.cars instanceof Array,
                obj.cars.length,
                Object.keys(obj.cars)); // output: true 1 ["toyota"] 
    

    这是因为您没有使用数组(尽管使用数组文字声明它),而是将其用作对象

    数组只是对象的一个特例,这意味着它们可以有单独的属性。这些属性不存在于数组中,而是数组的属性

    var arr = [1, 2, 3];
    arr.thing = 'a';
    console.log(arr.length); // 3
    
    要向数组中添加元素,应使用
    push

    var arr = []; // length: 0
    arr.push(1);  // length: 1
    
    如果希望能够通过名称和索引访问对象,则可以将
    push
    与自定义属性相结合

    var arr = [];
    arr.push(0);
    arr.mazda = 0;
    

    这是因为您没有使用数组(尽管使用数组文字声明它),而是将其用作对象

    数组只是对象的一个特例,这意味着它们可以有单独的属性。这些属性不存在于数组中,而是数组的属性

    var arr = [1, 2, 3];
    arr.thing = 'a';
    console.log(arr.length); // 3
    
    要向数组中添加元素,应使用
    push

    var arr = []; // length: 0
    arr.push(1);  // length: 1
    
    如果希望能够通过名称和索引访问对象,则可以将
    push
    与自定义属性相结合

    var arr = [];
    arr.push(0);
    arr.mazda = 0;
    

    cars
    更改为对象。数组只有基于整数的索引,而不是像示例中那样的字符串。您可以使用
    Object.keys(obj.cars)
    .length获取
    cars
    的长度@安迪:这是可行的,但为什么它不能与数组一起正常工作?
    obj.cars.push('toyota');目标车推进(“马自达”);obj.cars.length;//=>2
    汽车
    更改为对象。数组只有基于整数的索引,而不是像示例中那样的字符串。您可以使用
    Object.keys(obj.cars)
    .length获取
    cars
    的长度@安迪:这是可行的,但为什么它不能与数组一起正常工作?
    obj.cars.push('toyota');目标车推进(“马自达”);obj.cars.length;//=>2
    “car不是一个数组,它是一个对象”可能需要重新编写,因为
    cars
    是一个数组,但不能分配字符串索引-这是问题的基础。我在javascript中看到“arrays”必须使用数字索引。@Andy我编辑了我的帖子!感谢您关注我的帖子;)“car不是数组,它是一个对象”可能需要重新编写,因为
    cars
    是数组,但不能分配字符串索引,这是问题的基础。我在javascript中看到,“数组”必须使用数字索引。@Andy我编辑了我的帖子!感谢您关注我的帖子;)