【问题标题】:Array.size() vs Array.lengthArray.size() 与 Array.length
【发布时间】:2012-12-21 13:47:53
【问题描述】:

两者有什么区别?

所以我知道array.size() 是一个函数,而array.length 是一个属性。是否有使用一个的用例?一个更有效率吗? (我想.length 会明显更快,因为它是一个属性而不是一个方法调用?)为什么要使用较慢的选项?是否有一些浏览器与其中一种不兼容?

  var x = [];
  console.log(x.size());
  console.log(x.length);
  console.log(x.size()==x.length);
  x =[1,2,3];
  console.log(x.size());
  console.log(x.length);
  console.log(x.size()==x.length);

将打印:

  0, 0, true
  3, 3, true

【问题讨论】:

标签: javascript arrays


【解决方案1】:

Array.size() 方法无效

始终使用长度属性

有一个库或脚本将 size 方法添加到数组原型,因为这不是本机数组方法。这通常是为了添加对自定义 getter 的支持。使用它的一个例子是当你想获得一个数组在内存中的大小(这是我能想到的唯一对这个名字有用的东西)。

Underscore.js 不幸地定义了一个size 方法,它实际上返回一个对象或数组的长度。因为不幸的是,函数的长度属性被定义为函数声明它们必须使用替代方法的命名参数的数量,并且选择了大小(计数会是更好的选择)。

【讨论】:

    【解决方案2】:

    .size() 不是 Array 的原生 JS 函数(至少在我知道的任何浏览器中都没有)。

    .length应该使用。


    如果

    .size() 是否在您的页面上工作,请确保您没有包含任何额外的库,例如 prototypeArray 原型混淆。

    您的浏览器上可能有一些插件与Array 原型不符。

    【讨论】:

    • @BartFriederichs 我在 Chrome 中,但很高兴知道 :-D
    • 它在 Chrome 中工作,在 Firefox 中不工作,我倾向于使用 Chrome 来进行调试,所以它似乎工作。感谢您指出它不存在。
    • 如果它适用于您的 Chrome,您可能会在页面上调用一些额外的库,将其添加到 Array 原型中。
    • Version 23.0.1271.97 [].size function size(){return this.length;} 所以实际上它只是 .length 的一个包装......我现在有点傻......
    • @AbrahamP,在此页面上按 F12,然后在控制台中输入 [].size。如果它有效,那么你有某种与 Array 原型混在一起的 Chrome 插件,我会担心的。 :)
    【解决方案3】:

    .size() 函数在 Jquery 和许多其他库中可用。

    .length 属性仅在索引为整数时有效。

    length 属性适用于这种类型的数组:

    var nums = new Array();
    nums[0] = 1; 
    nums[1] = 2;
    print(nums.length); // displays 2
    

    length 属性不会与这种类型的数组一起使用:

    var pbook = new Array(); 
    pbook["David"] = 1; 
    pbook["Jennifer"] = 2;
    print(pbook.length); // displays 0
    

    因此,在您的情况下,您应该使用 .length 属性。

    【讨论】:

    • 如果大小不起作用,有什么东西可以与字符串一起使用吗?
    • @Chris 对于带有字符串键的数组,如上面的pbook,可以使用$(pbook).size(); [需要jQuery]
    • 你为什么要到处放两个空格呢?
    【解决方案4】:

    .size() 是 jQuery 的,很可能您对将 jQuery 库导入他的项目的其他人感到困惑或借鉴。

    如果您要导入 jQuery 并且您会写成 $(array).size(),它将返回数组长度。

    【讨论】:

    • 很多库使用.size()不仅仅是jquery
    【解决方案5】:

    array.length 不一定是数组中的项目数:

    var a = ['car1', 'car2', 'car3'];
    a[100] = 'car100';
    a.length; // 101
    

    数组的长度比最高索引大一。

    如前所述,Array.size() 不是有效方法。

    More information

    【讨论】:

    • 实际上是项目数。大多数 JS 解释器会用 undefined 填充数组行。在您的示例中,您的数组中有 101 个元素,其中 97 个元素没有值(未定义),但元素在那里。它看起来像: ['car1', 'car2', 'car3', undefined * 97, 'car100'] 如果你在这个数组上循环,你的增量变量将在循环后值为 101。
    • 另一方面,array.length 不一定是数组中定义(未分配)值的数量。
    • 正是数组中的项目数。这些项目是否未定义取决于程序员,而不是 JS。
    【解决方案6】:

    属性 'length' 为带有数字键的数组返回 (last_key + 1):

    var  nums  =  new  Array();
    nums [ 10 ]  =  10 ; 
    nums [ 11 ]  =  11 ;
    log.info( nums.length );
    

    将打印 12!

    这将起作用:

    var  nums  =  new  Array();
    nums [ 10 ]  =  10 ; 
    nums [ 11 ]  =  11 ;
    nums [ 12 ]  =  12 ;
    log.info( nums.length + '  /  '+ Object.keys(nums).length );
    

    【讨论】:

    • 虽然这是一个有趣的答案,但我不完全确定它是否是 this 问题的答案
    • OP 在询问“Array.size() vs Array.length”。从前面的讨论中可以清楚地看出,“size”函数不是标准 JavaScript 的一部分,而是由库实现的。所以我假设 OP 对如何检索 JavaScript 数组的实际长度感兴趣。我发现了 JavaScript 的一个鲜为人知的“功能”,它可能导致意外行为,尤其是当数组包含其他类型的对象(例如字符串)时,行为会有所不同。
    • 您可能对此感兴趣: function asz( o ) { return null !== o && 'object' === typeof o && def( o.length ) ? Object.keys(o).length:0; }
    【解决方案7】:

    .size() 方法从 jQuery 1.8 开始被弃用。改用 .length 属性

    见:https://api.jquery.com/size/

    【讨论】:

      【解决方案8】:

      Size 检测到重复,它会返回唯一值的个数

      const set1 = new Set([1, 2, 3, 4, 5, 5, 5, 6]);
      console.log(set1.size);
      // expected output: 6
      

      【讨论】:

        【解决方案9】:

        其实.size()并不是纯JavaScript方法,Set对象有一个访问属性.size有点像.size()但不是函数方法,就像我说的那样是 Set 对象的访问器属性,用于显示 Set 对象中(唯一)元素的唯一数量。

        size 访问器属性返回 Set 对象中(唯一)元素的数量。

        const set1 = new Set();
        const object1 = new Object();
        
        set1.add(42);
        set1.add('forty two');
        set1.add('forty two');
        set1.add(object1);
        
        console.log(set1.size);
        // expected output: 3
        

        length 是一个可迭代对象(数组)的属性,它返回该数组中元素的数量。该值是一个无符号的 32 位整数,在数值上始终大于数组中的最高索引。

        const clothing = ['shoes', 'shirts', 'socks', 'sweaters'];
        
        console.log(clothing.length);
        // expected output: 4
        

        【讨论】:

          【解决方案10】:

          我们可以使用 .length 属性来设置或返回数组中元素的数量。 返回值是一个数字

          > set the length: let count = myArray.length;
          > return lengthof an array : myArray.length
          

          如果我们需要过滤重复值并获取集合中元素的数量,我们可以为您提供 .size。

          const set = new set([1,1,2,1]); 
           console.log(set.size) ;`
          

          【讨论】:

            猜你喜欢
            • 2019-11-16
            • 2010-12-03
            • 2012-08-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-01-17
            • 1970-01-01
            • 2014-11-25
            相关资源
            最近更新 更多