cari

Rumah  >  Soal Jawab  >  teks badan

javascript Array.slice方法参数

看到的教程或者网上文章文档,都说slice(start,[end])其中参数start必须,但是测试发现不指定start也可以,是有新的标准么?

伊谢尔伦伊谢尔伦2841 hari yang lalu993

membalas semua(4)saya akan balas

  • 伊谢尔伦

    伊谢尔伦2017-04-10 14:33:29

    看文档请认准MDN牌,M~D~N,我看行~

    If begin is omitted, slice begins from index 0. - Array.prototype.slice()

    balas
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-10 14:33:29

    请看MDN文档~

    If begin is omitted, slice begins from index 0.

    balas
    0
  • PHP中文网

    PHP中文网2017-04-10 14:33:29

    楼上说的是mdn上Array.prototyep.slice, 可能楼主指的是 msdn 上 array.slice. 是一个IE类浏览器和W3C类标准浏览器的在js脚本方面的差异。

    不要在乎现象,而要找到问题的本质。

    balas
    0
  • ringa_lee

    ringa_lee2017-04-10 14:33:29

    啊哈! 喜欢扣源代码的来了
    v8 builtins.cc中

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    <code>BUILTIN(ArraySlice) {

        //....

        ASSERT(len >= 0);

        int n_arguments = args.length() - 1;

        // Note carefully choosen defaults---if argument is missing,

        // it's undefined which gets converted to 0 for relative_start

        // and to len for relative_end.

        int relative_start = 0;     //<--  看这里看这里

        int relative_end = len;

        if (n_arguments > 0) {

          Object* arg1 = args[1];

          if (arg1->IsSmi()) {

            relative_start = Smi::cast(arg1)->value();

          } else if (!arg1->IsUndefined()) {

            return CallJsBuiltin(isolate, "ArraySlice", args);

          }

          if (n_arguments > 1) {

            Object* arg2 = args[2];

            if (arg2->IsSmi()) {

              relative_end = Smi::cast(arg2)->value();

            } else if (!arg2->IsUndefined()) {

              return CallJsBuiltin(isolate, "ArraySlice", args);

            }

          }

        }

        //....

    }

    </code>

    balas
    0
  • Batalbalas