看到的教程或者网上文章文档,都说slice(start,[end])其中参数start必须,但是测试发现不指定start也可以,是有新的标准么?
看到的教程或者网上文章文档,都说slice(start,[end])其中参数start必须,但是测试发现不指定start也可以,是有新的标准么?
楼上说的是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);
}
}
}
//....
}
13 回答12.8k 阅读
7 回答2k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
6 回答927 阅读✓ 已解决
6 回答1.1k 阅读
2 回答1.3k 阅读✓ 已解决
看文档请认准MDN牌,M~D~N,我看行~