最近在看廖雪峰的JS课程,浏览器中的操作DOM的那一章,有这样一道题。

  • JavaScript
  • Swift
  • HTML
  • ANSI C
  • CSS
  • DirectX
<!-- HTML结构 -->
<ul id="test-list">
<li>JavaScript</li>
<li>Swift</li>
<li>HTML</li>
<li>ANSI C</li>
<li>CSS</li>
<li>DirectX</li>
</ul>

把与Web开发技术不相关的节点删掉。

我的答案过于复杂,我上网百度后,发现了这样的解法。

'use strict';

var parent = document.getElementById('test-list');
var children = [].slice.call(parent.children); //Array.prototype.slice.call()
children.forEach((element) => {
for (var s of ['Swift', 'ANSI C', 'DirectX']) {
if (element.innerText == s) {
parent.removeChild(element);
}
}
}); // 测试:
(function () {
var
arr, i,
t = document.getElementById('test-list');
if (t && t.children && t.children.length === 3) {
arr = [];
for (i = 0; i < t.children.length; i ++) {
arr.push(t.children[i].innerText);
}
if (arr.toString() === ['JavaScript', 'HTML', 'CSS'].toString()) {
console.log('测试通过!');
}
else {
console.log('测试失败: ' + arr.toString());
}
}
else {
console.log('测试失败!');
}
})();

我看到Array.prototype.slice.call()时,我是一脸蒙圈的。后来看了MDN和许多别人的博客才理解。

MDN中对于Array.prototype.slice.()的介绍中,提到了类数组对象。以下是原文:

slice 方法可以用来将一个类数组(Array-like)对象/集合转换成一个新数组。你只需将该方法绑定到这个对象上。 一个函数中的 arguments 就是一个类数组对象的例子。

function list() {
return Array.prototype.slice.call(arguments);
} var list1 = list(1, 2, 3); // [1, 2, 3]

除了使用 Array.prototype.slice.call(arguments),你也可以简单的使用 [].slice.call(arguments) 来代替。

所以arguments并不是真正的数组对象,只是与数组类似而已,所以它并没有slice这个方法,而Array.prototype.slice.call(arguments, 1)可以理解成是让arguments转换成一个数组对象,让arguments具有slice()方法。

同理可知,我们可以给Array.prototype.slice.call(arguments)加上第二个参数。

function list() {
return Array.prototype.slice.call(arguments, 1);
} var list2 = list(4, 5, 6);
list2; //[5, 6]

参考链接:

  1. MDN文档
  2. bowen-CSDN

最新文章

  1. [LeetCode] Battleships in a Board 平板上的战船
  2. 【XLL 框架库函数】 QuitFramework
  3. hadoop2的高可用性
  4. 【阿迪达斯 ZX850 系列】
  5. Database(Mysql、Sqlserver) Configuration Security Reinforcement
  6. js事件处理机制
  7. iOS - MVP 架构模式
  8. What is the Database Initialization Parameter That is Associated to an ORA-32004 Error ?
  9. 向Array中添加冒泡排序
  10. The new Portable Class Library for SQLite z
  11. Java 之 调用.Net的 WebService 整理
  12. BFC(Box,Formatting,Context) —— 块级格式化上下文
  13. OpenStack Networking
  14. _js day12
  15. 基于Tkinter利用python实现颜色空间转换程序
  16. MVC创建XML,并实现增删改
  17. 数据存储之Web存储(sessionStorage localStorage globalStorage )
  18. NYOJ 炫舞家st
  19. Scheme来实现八皇后问题(1)
  20. Django相关面试题

热门文章

  1. MVC之ActionFilterAttribute
  2. 在InternetExplorer.Application中显示本地图片
  3. s:actionmessage页面样式失效
  4. 【C++】双向线性链表容器的实现
  5. 通过已有Nginx镜像创建私有仓库
  6. Linux gadget驱动分析3------复合设备驱动
  7. 2.EF的数据审计日志
  8. 一种高兼容性的JavaBean序列化方案
  9. mac 安装 swoole 可能会出现的错误
  10. C/C++ Python的函数默认参数