有人能用javascript来解释这段代码吗

有人能用javascript来解释这段代码吗,javascript,Javascript,星号包含在标签中: {Array(rating).fill().map((u,i)=>(⭐ )} 因此,它给出了评级参数所能接受的星数,但如何给出呢?例如,我们给出评级3值,它将***作为输出。逐步: Array(rating)创建一个rating空元素的数组,因此如果rating为3,则数组(rating)返回[空,空,空] [empty,empty,empty].fill()返回[undefined,undefined,undefined],因为在JavaScript中,不能映射()空值。

星号包含在
标签中:

{Array(rating).fill().map((u,i)=>(⭐

)}
因此,它给出了评级参数所能接受的星数,但如何给出呢?例如,我们给出评级
3
值,它将
***
作为输出。

逐步:

  • Array(rating)
    创建一个
    rating
    空元素的数组,因此如果
    rating
    3
    ,则
    数组(rating)
    返回
    [空,空,空]
  • [empty,empty,empty].fill()
    返回
    [undefined,undefined,undefined]
    ,因为在JavaScript中,不能
    映射()
    空值。这是JavaScript的一个有点奇怪的部分,但事实就是如此
  • 现在,
    [undefined,undefined,undefined].map((u,i)=>(⭐

    将数组转换为
    [⭐

    ,⭐

    ,⭐

    ]
    ,这不是有效的JavaScript,但我假设您使用的是React和JSX。它将被编译成带有⭐ 作为其文本,每个
  • 当您在花括号内使用JSX表达式时,它将成为您的输出


    因此,此代码段将输出

    ,或任意数量的段落,具体取决于
    评级值。

    让我们一步一步来做。通过在终端中打开
    节点
    控制台,跟踪您的机器可能会有所帮助

    将整数(
    rating
    )转换为数组将返回长度为
    rating
    -的数组

    > Array(5)
    [ <5 empty items> ]
    
    接下来我们调用
    map
    ,这是一个新的数组,它创建了一个新的数组,其中填充了对调用数组中的每个元素调用所提供函数的结果

    在您的示例中,我们正在创建一个新的匿名函数,该函数接受两个参数。当对数组调用
    map
    时,第一个参数是数组中项的索引(我们不使用该索引,因此在本例中,我们用下划线
    \u
    指示该参数未使用)。第二个参数是该数组中的实际项(如我们前面所述,所有5个项都未定义)

    因此,使用由
    标记封装的星形表情符号,将从
    映射
    新创建的数组填充到
    评级
    -长度

    > let rating = 5
    undefined
    > Array(rating).fill().map((_, i) => ( '<p>⭐</p>' ))
    [ '<p>⭐</p>', '<p>⭐</p>', '<p>⭐</p>', '<p>⭐</p>', '<p>⭐</p>' ]
    
    >让额定值=5
    未定义
    >数组(rating).fill().map((513;,i)=>('⭐

    (")) ['⭐

    “,”⭐

    “,”⭐

    “,”⭐

    “,”⭐

    “]
    Array(3)
    使用3个未定义的值创建一个数组,在它们上面映射循环,并用星形替换它们。@lawrencerone
    .fill()
    实际上是需要的,因为
    .map()
    跳过
    空值(创建
    数组(n)
    时产生的特殊JS值)。我通过艰苦的方式学到了:D@RoboRobok是的,你右边的
    数组(3)
    创建了一个长度为3的完全稀疏数组,因此它没有一个自己的项目。它是空的,这也意味着它不能通过数组方法进行迭代,如
    map
    filter
    .fill()
    确实为数组填充了每个索引的
    未定义的
    值,包括
    0
    2
    之间的值,因此数组现在不是稀疏的/空的,可以迭代。多谢了,伙计,你解释得很好,是的,我正在使用react。在MERN旅程中一定要:)
    > let rating = 5
    undefined
    > Array(rating).fill().map((_, i) => ( '<p>⭐</p>' ))
    [ '<p>⭐</p>', '<p>⭐</p>', '<p>⭐</p>', '<p>⭐</p>', '<p>⭐</p>' ]