【问题标题】:New to JavaScript: Can I pass a List into this function and have it still work?JavaScript 新手:我可以将 List 传递给这个函数并让它仍然工作吗?
【发布时间】:2016-08-22 00:11:40
【问题描述】:

正如标题所说,我是 JavaScript 新手,对某些语法并不完全确定。

找了一会儿,发现如下函数:

function makeUL(array) {
    // Create the list element:
    var list = document.createElement('ul');

    for (var i = 0; i < array.length; i++) {
        // Create the list item:
        var item = document.createElement('li');

        // Set its contents:
        item.appendChild(document.createTextNode(array[i]));

        // Add it to the list:
        list.appendChild(item);
    }

    // Finally, return the constructed list:
    return list;
}

我需要知道的是,如果我将一个字符串列表传递给函数参数,它是否仍然有效,或者当它说数组是定义它是什么类型的变量时?如果它目前不适用于列表,需要更改什么?

【问题讨论】:

  • 贴出不起作用的代码。我不完全确定“字符串列表”是什么意思
  • 你需要知道它是否有效......为什么不试试呢?此外,在纯 JavaScript 中没有 List 类型...
  • 您到底在调用什么字符串列表? JavaScript 有数组,而不是列表(嗯,有“类似数组的对象”,但它们也不是列表)。列表元素(&lt;dl&gt;&lt;ol&gt;&lt;ul&gt;)完全是不同的野兽。

标签: javascript arrays list function


【解决方案1】:

您可以传递任何包含字符串项的 Array类似数组的对象,无论参数如何命名,您的函数都会按预期工作。

类数组对象是一个对象,它有一个length 属性 value >=0 和属性 0..length-1时间>。类数组对象不实现数组方法。可以使用a instanceof ArrayArray.isArray(a) 将数组与类似数组的对象区分开来,而typeof a 在这两种情况下都返回'object'

【讨论】:

    【解决方案2】:

    当它说数组是定义它是什么类型的变量时?

    没有。它定义了参数将在函数范围内分配给的变量的名称。

    JavaScript(至少是您在此处使用的 ES5)对函数参数没有任何类型强制,因此您可以传递任何您喜欢的值。

    该函数确实希望您传递的值是一个具有length 属性和多个名称为整数的属性的对象(即,它希望该值类似于 一个数组(另见duck typing))。

    List 不是标准的 JavaScript 数据类型。如果你已经创建了一个 List 对象,那么你可以传递它,只要它是类数组的。

    【讨论】:

      【解决方案3】:

      array只是预期参数的名称。 它可以是任何类型(Javascript 没有类型)

      所以:是的,您的列表仍然“有效”(当然,只要它支持在其上调用的函数)

      【讨论】:

        【解决方案4】:

        它仍然可以工作。说真的,在 javascript 中没有这样的数组。因此,即使您使用以下参数调用函数:

        makeUL(["Cpp","Java","Javascript"])
        

        输出将是:

        <ul>
          <li>Cpp</li>
          <li>Java</li>
          <li>Javascript</li>
        </ul>
        

        【讨论】:

          【解决方案5】:

          我假设你的意思是数组。但我认为你的函数只是返回一个 DOM 元素,所以除非你将它附加到 DOM 树中,否则你不会直接在浏览器中看到它。

          var listofstrings = ['item 1','item 2','item 3'];
          document.getElementByName('body').appendChild(makeUL(listofstring));
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-09-19
            • 1970-01-01
            • 2016-11-10
            • 1970-01-01
            • 1970-01-01
            • 2023-03-11
            • 1970-01-01
            相关资源
            最近更新 更多