javascript Array.slice方法参数

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

阅读 8.5k
4 个回答

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

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

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

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

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

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);
        }
      }
    }
    //....
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题