有哪些值得一读的优秀开源 JS 代码

JavaScript08

有哪些值得一读的优秀开源 JS 代码,第1张

jQuery

jQuery 是一个无需介绍的库。它凭一己之力让跨浏览器网站使用成为现实,同时把 web 带到今天的位置。Web 标准已经被大多数浏览器制造商采纳并真正地尊重,jQuery 是其中的原因之一。jQuery 基金会的使命是“通过开源软件的开发和支持,以及开发社区的合作,改善开放的 web,让每一个人都可以访问它。”

jQuery 是世界上最常用的 JavaScript 库,所有应用程序都应该使用它,除非你不在意程序员的工作效率。它使得 DOM 遍历、事件处理、动画、AJAX 在所有浏览器上变得更简单、更容易。

何时使用 jQuery?一直使用,除非你想使用一个像 Zepto 的轻量级版本。

GitHub:https://github.com/jquery/jquery/jquery

AngularJS

Angular 是流行的企业级框架,许多开发人员都在使用它来构建和维护复杂的 web 应用程序。Angular 的人气非常高,包括 Domino’s Pizza, Ryanair, iTunes Connect, PayPal Checkout, 谷歌等企业都在使用它。Angular 是一个由谷歌支持的开源框架。Angular 自称是 HTML 的一个扩展,用来构建复杂的 web 应用程序。另外如果你熟悉 TypeScript, Angular 2就是用它构建的。

Angular 是一个 MVC 类型的框架。它提供了模型和视图之间的双向数据绑定。该数据绑定允许每当数据改变时,两边自动更新。  它使你能够构建可复用的视图组件。它提供了一个服务框架,使得后端-前端服务通信更容易。最后,它只是普通的 JavaScript。

何时使用 AngularJS?当你正在构建一个复杂的 web 前端应用程序,同时需要一个模块化的框架来处理一切时。

GitHub:https://github.com/angular/angular.js

React

React 是今年最受欢迎的 JavaScript 项目!每个人都似乎在谈论 ReactJS。去年我参加的每一个会议,至少有好几个议题是关于 React 和同家族的其他库(Flux, Redux)的。React 是开源软件,主要由 Facebook 开发,其他大型科技公司也有贡献。React 自称是一个用于构建用户界面的 JavaScript 库。

React 主要是 MVC 中的 V。它的重点完全在 MVC 的 V 部分,忽视应用程序架构的其余部分。它提供了一个组件层,使得创建 UI 元素,组合元素变得更容易。它使用虚拟 DOM,因此优化了渲染,且允许从 node.js 渲染 React。此外,它实现了单向响应的数据流,因此比其他框架更容易理解和使用。

作为 MVC 中的 V,很多项目将 React 结合 Angular 或 Ember 这样的框架使用。

何时使用 React?当你想要一个强大的视图层,但不需要在应用程序的其余部分使用一个复杂的框架,或者你在 Angular、Backbone 或 Ember 应用上需要一个视图层时。当你正试图建立一个同构 web 框架时。

GitHub:https://github.com/facebook/react

Backbone

Backbone 是一个著名的简易框架,适合单个 JavaScript 文件。Backbone 已经存在有一段时间了,是以 CoffeeScript 和 Underscore 闻名的 Jeremy Ashkenas 所开发的。对于一些为小型 web 应用寻找一个结构简单的框架,而不想引入如 Angular 或 Ember 这些大型框架的团队,Backbone 特别受欢迎。

Backbone 提供一个完整的 MVC 框架以及路由。模型允许键-值绑定和数据变化的事件处理。模型(和集合)可以连接到RESTful API。视图具有声明式事件处理,路由在处理 URL 和状态管理上做的很出色。它包含你创建一个单页面应用程序所需要的一切,且没有提供太多东西,没有不必要的复杂度。

何时使用 Backbone?Backbone 是我创建简单 web 应用程序的首选框架。

GitHub:https://github.com/jashkenas/backbone/

Ember

Ember 是一个固执的 web 应用程序框架,关注程序员的工作效率。Ember 比较流行,它的核心团队包括像曾是 Ruby on Rails 和 jQuery 核心团队成员的 Yehuda Katz 的聪明人。Ember 自称是“一个用于创建大规模 web 应用程序的框架”,且不浪费你的时间。它很固执,为你提供了很多选择。

Ember 也是一个 MVC 框架。它包括一个模板和视图引擎,当数据变化时自动更新,就像 Angular,Backbone 和 React 一样。它包含 web组件 的思想,让你使用自己标签扩展 HTML(就像 Angular 一样)。它也有一个知道如何与你的 RESTful API 一起工作的路由和模型引擎。

何时使用 Ember?当你只需要一个可以运行的框架时。当你因为预算紧张或工期很短而不需要灵活性时,请使用 Ember。

GitHub:https://github.com/emberjs/ember.js

Underscore &lodash

有时候 JavaScript 内置的功能导致程序员的效率并不高。总是缺少一个工具函数或一个可以简化代码的函数。Underscore(和 lodash)是一个 JavaScript 库,它提供了一整套工具函数,不需要对内置 JavaScript 对象打补丁。两个库均提供超过 100 个功能助手和其他专用功能,包括 map,filter,invoke,reduce,template, throttle, bind, extend, pick, clone 等更多的函数。

何时使用 Underscore?当你需要一个单独的 JavaScript 文件,来立即提升程序员的工作效率时。

GitHub:https://github.com/jashkenas/underscore

何时使用 lodash?当你需要模块化和性能稍强版本的 Underscore,同时更容易地支持 AMD 和社区插件时。

LodashGitHub:https://github.com/lodash/lodash

D3.js

数据可视化和图表是一种常见的 web 应用程序需求。D3.js 是任何数据操作和可视化的事实标准。它是 GitHub上最受欢迎的项目之一,被数以百计的组织使用。大量的图形,图表和可视化库在 D3 上构建。

D3 允许你操作任何来源的数据文档,转换成 DOM 或/和 SVG 或/和 CSS。D3 关注现代 web 标准,确保你不受任何专有格式的约束,比如 Flash 和 Silverlight。

何时使用 D3.js?在你需要任何形式的可视化的时候。

GitHub:https://github.com/mbostock/d3

Babylon.js

想要构建完全符合现代 web 标准且跨浏览器的视频游戏吗?看看 Babylon.js,它是基于 WebGL 和 JavaScript 的 3d 游戏引擎。你可以创建令人难以置信的包含物理、音频和粒子系统等等的高质量游戏。

何时使用 Babylon.js?无论何时,只要你想做一个视频游戏或任何类型的复杂三维场景,都能用上。

GitHub:https://github.com/BabylonJS/Babylon.js

Three.js

想要构建一个 3D 可视化场景,但不需要一个完整的游戏引擎?three.js 提供了一个轻量级的 3d 库,允许渲染 3d 为 HTML5 画布、SVG 和 WebGL。它是相当简单的库,在 three.js 的展示里有数百个优美的例子。

何时使用Three.js?当你需要一个能输出为 Canvas 的简单的 3D 可视化场景时。

GitHub:https://github.com/mrdoob/three.js/

Mocha&Chai

JavaScript 在很长一段时间内是非常烦人的。测试任何代码通常都被认为是恼人的,但它却是每个开发人员都应该做的事情。每个开发人员似乎总是蔑视和忽略它,而不测试他们的代码。这个恼人的东西有一个解决办法,那就是 Mocha 和 Chai。两个库的名字都来自美味的热饮料,它们都能帮你测试代码,但方式不同。

Mocha 是一个 JavaScript 测试框架,使得你在 node 模块和浏览器 app 中测试异步代码变得更容易。Mocha 测试可以串联运行,可以为正确的测试用例添加异常跟踪的能力。

Chai 是一个行为驱动开发/测试驱动开发的断言库,可以搭配 Mocha 使用。它可以把你需要测试的东西用可读的风格简单地表达出来。

何时使用 Mocha &Chai?总是!请测试你的代码,让世界变得更美好。

Chai GitHub:https://github.com/chaijs/chai

Karma

既然已经把 Mocha 和 Chai 包含在这个列表中了,如果不包含用来运行这些测试或设置持续集成测试的测试运行器,那将是不完整的。Karma 是一款旨在帮助你在不同的浏览器上自动运行测试的工具。它可以帮助你在所有浏览器上运行 Mocha 和 Chai 测试。

不是每个浏览器都运行在所有平台,但幸运的是可以使用一些免费工具来测试其他浏览器,看看 Browser Screenshots。如果你正在 OS X 上运行代码,想测试 Edge 或 IE,可以 免费 使用这个工具。

何时使用 Karma?当你的应用程序有一个完善的测试套件,并希望确保测试在所有浏览器上通过时。

GitHub:https://github.com/karma-runner/karma

PhantomJS

运行完整的浏览器来测试你的代码比较耗内存和 CPU。PhantomJS 允许你运行一个轻量的 WebKit —— Safari 和Chrome(现在是 Blink)后台的渲染引擎。它允许你通过 JavaScript API 运行测试,捕捉截图,监控网络和自动浏览页面。

何时使用 PhantomJS ?当你需要进行更多的测试,操作页面和监视网络请求时。

GitHub:https://github.com/ariya/phantomjs

Grunt &Gulp

为生产环境构建网站,通常涉及到提高性能的任务,比如 JavaScript 和 CSS 的压缩, CoffeeScript/TypeScript 的编译,单元测试,语法检查。也许你已经有一个为网站发布到生产环境的工具链,如果没有,你可以使用任务运行器,比如 Grunt 或Gulp。两者都有大量关于网站的任何转换的插件,为发布到生产环境做好准备。

何时使用 Grunt?当你喜欢写配置文件同时不介意你的任务运行器生成中间文件时。

Grunt GitHub:https://github.com/gruntjs/grunt

何时使用 Gulp?当你喜欢在配置上写代码和利用 node.js 的流功能来加快任务执行时。

Gulp GitHub:https://github.com/gulpjs/gulp

Babel

JavaScript 语言正在迅速发展。ECMAScript2015 于去年夏天发布,它的许多新特性在最新的浏览器上实现了。如果你想看看 ECMAScript 2015 的兼容性,你可以看看来自 @kangax 的这个 表。你会注意到,最新版本的 Edge,Firefox 和 Chrome 已经几乎完全兼容了。

我们并不是生活在一个完美的世界。作为开发人员,我们需要继续支持旧的浏览器,它们没有最新最好的 JavaScript 特性。我们要推进 web 和改善我们的代码库。Babel 是一个 JavaScript 编译器,用于把最新的 JavaScript 标准编译成可在 IE9 等老浏览器上运行的兼容ES5的 JavaScript。它有一些插件,使得 React 开发更容易,甚至可以使用一些不属于该规范的特性(例如ES7)。

何时使用 Babel?当你想使用新的 JavaScript 语言特性,同时还要支持老版本浏览器时。

GitHub:https://github.com/babel/babel

引自:

最佳的 JavaScript 前端框架、库和工具

http://web.jobbole.com/84644/

按钮驱动文字闪烁

脚本说明:

第一步:把如下代码加入<body>区域中

<SCRIPT LANGUAGE="JavaScript">

var x=9

var strobe="on"

if (navigator.appName == "Netscape") {

visShow="'show'"

visHide="'hide'"

docStyle="document."

styleDoc=""

}

else {

visHide="'hidden'"

visShow="'visible'"

docStyle=""

styleDoc=".style"

}

</SCRIPT>

<SCRIPT LANGUAGE="JavaScript">

function hide1() {

eval(docStyle 'object1' styleDoc '.visibility=' visHide)

}

function hide2() {

eval(docStyle 'object2' styleDoc '.visibility=' visHide)

}

function hide3() {

eval(docStyle 'object3' styleDoc '.visibility=' visHide)

}

function hide4() {

eval(docStyle 'object4' styleDoc '.visibility=' visHide)

}

function hide5() {

eval(docStyle 'object5' styleDoc '.visibility=' visHide)

}

function hide6() {

eval(docStyle 'object6' styleDoc '.visibility=' visHide)

}

function hide7() {

eval(docStyle 'object7' styleDoc '.visibility=' visHide)

}

function hide8() {

eval(docStyle 'object8' styleDoc '.visibility=' visHide)

}

function hide9() {

eval(docStyle 'object9' styleDoc '.visibility=' visHide)

}

function hide10() {

eval(docStyle 'object10' styleDoc '.visibility=' visHide)

}

function show1() {

eval(docStyle 'object1' styleDoc '.visibility=' visShow)

hide2(),hide3()

}

function show2() {

eval(docStyle 'object2' styleDoc '.visibility=' visShow)

hide1(),hide3()

}

function show3() {

eval(docStyle 'object3' styleDoc '.visibility=' visShow)

hide2(),hide4()

}

function show4() {

eval(docStyle 'object4' styleDoc '.visibility=' visShow)

hide3(),hide5()

}

function show5() {

eval(docStyle 'object5' styleDoc '.visibility=' visShow)

hide4(),hide6()

}

function show6() {

eval(docStyle 'object6' styleDoc '.visibility=' visShow)

hide5(),hide7()

}

function show7() {

eval(docStyle 'object7' styleDoc '.visibility=' visShow)

hide6(),hide8()

}

function show8() {

eval(docStyle 'object8' styleDoc '.visibility=' visShow)

hide7(),hide9()

}

function show9() {

eval(docStyle 'object9' styleDoc '.visibility=' visShow)

hide8(),hide10()

}

function show10() {

eval(docStyle 'object10' styleDoc '.visibility=' visShow)

hide9()

}

function strobe1() {

x =1

eval("show" x "()")

if (x<10) setTimeout("strobe1()", 75)

else if (strobe=="on") strobe2()

}

function strobe2() {

x-=1

eval("show" x "()")

if (x>1) setTimeout("strobe2()", 75)

else strobe1()

}

function strobeOn() {

x=9

strobe="on"

strobe1()

}

function strobeOff() {

strobe="off"

}

</SCRIPT>

<div id="vis" style="position:absolutevisibility:showleft:175pxtop:280pxz-index:1">

<table cellpadding=2 border=1><tr>

<td><center><b>Strobe:</b></center></font></a></td>

<td><a href="javascript:strobeOn()">

<font color="#000000"><center>on</center></font></a></td>

<td><a href="javascript:strobeOff()">

<font color="#000000"><center>off</center></font></a></td>

</tr></table></div>

<div id="object1" style="position:absolutevisibility:hideleft:175pxtop:300pxz-index:1">

<table border=1 bgcolor=#eaffff width=175 height=50><td><center><b><font color="#F9F9F9">JavaScript Planet</font></b></center></td></table>

</div>

<div id="object2" style="position:absolutevisibility:hideleft:175pxtop:300pxz-index:1">

<table border=1 bgcolor=eaffff width=175 height=50><td><center><b><font color="#ECECEC">JavaScript Planet</font></b></center></td></table>

</div>

<div id="object3" style="position:absolutevisibility:hideleft:175pxtop:300pxz-index:1">

<table border=1 bgcolor=eaffff width=175 height=50><td><center><b><font color="#D5D5D5">JavaScript Planet</font></b></center></td></table>

</div>

<div id="object4" style="position:absolutevisibility:hideleft:175pxtop:300pxz-index:1">

<table border=1 bgcolor=eaffff width=175 height=50><td><center><b><font color="#C0C0C0">JavaScript Planet</font></b></center></td></table>

</div>

<div id="object5" style="position:absolutevisibility:hideleft:175pxtop:300pxz-index:1">

<table border=1 bgcolor=eaffff width=175 height=50><td><center><b><font color="#b0b0b0">JavaScript Planet</font></b></center></td></table>

</div>

<div id="object6" style="position:absolutevisibility:hideleft:175pxtop:300pxz-index:1">

<table border=1 bgcolor=eaffff width=175 height=50><td><center><b><font color="#939393">JavaScript Planet</font></b></center></td></table>

</div>

<div id="object7" style="position:absolutevisibility:hideleft:175pxtop:300pxz-index:1">

<table border=1 bgcolor=eaffff width=175 height=50><td><center><b><font color="#808080">JavaScript Planet</font></b></center></td></table>

</div>

<div id="object8" style="position:absolutevisibility:hideleft:175pxtop:300pxz-index:1">

<table border=1 bgcolor=eaffff width=175 height=50><td><center><b><font color="#6b6b6b">JavaScript Planet</font></b></center></td></table>

</div>

<div id="object9" style="position:absolutevisibility:hideleft:175pxtop:300pxz-index:1">

<table border=1 bgcolor=eaffff width=175 height=50><td><center><b><font color="#424242">JavaScript Planet</font></b></center></td></table>

</div>

<div id="object10" style="position:absolutevisibility:showleft:175pxtop:300pxz-index:1">

<table border=1 bgcolor=eaffff width=175 height=50><td><center><b><font color="#000000">JavaScript Planet</font></b></center></td></table>

</div><P>

</FONT></CENTER>

数值number

字符串string

布尔型boolean

null空

undefined 没有值

typeof检测数据类型

Number()转换数值

parseInt()转换数字

parseFloat()转换小数

toString(进制数)

Boolean()转换布尔型

isNaN()是,不是一个数字

prompt输入框

alert弹出框

confirm询问框

if else 条件语句

switch case break default 分支语句

while 循环语句

do while 先执行

条件?成立执行:不成立执行 三元运算符

for 循环

break终止循环

continue结束本次循环

return 函数返回值

objname='Jack'添加对象成员

objname['name']='jack'点语法添加

delete obj.name删除对象成员

delete obj['name']删除对象成员 点语法

obj.name 对象查找

obj['jack']点语法对象查找

for in 循环 用来遍历对象

数组

push 添加放在最后

pop删除最后

unshift 添加最前

shift删除第0个

concat 拼接concat拼接字符串

reverse反转数组

splice截取多少个

slice截取的索引 slice 截取字符串

sort数组排序

indexof()内容索引的位置indexof查找字符位置索引

forEach遍历数组

reduce((prev//上一次结果,currect//当前值){return 结果},0//初始值)

for of循环 es6新增循环 不能遍历对象

map映射数组返回值新数组

filter把满足条件的筛选放到新数组

some遍历满足条件返回true

every所有满足才返回true

字符串操作

indexOf查找字符位置索引

charAt()对应索引的字符串

charCodeAt()Ascall编码

substring截取字符串开始0索引 结束索引

substr截取字符串 多少个

concat拼接字符串

slice 截取字符串结束索引

toUpperCase字符串该大写

toLowerCase改成小写

split()用什么字符切割放在数组中

replace(把什么,替换成什么)

sort(function(a,b)){returna-b)}) 排序

join数组用字符连接成字符串

数字方法

Math.random随机数0-0.999

Math.round四舍五入

Math.ceil向上取整

Math.floor向下取整

Math.pow取幂

Math.sprt开平方根

Math.abs取绝对值

Math.max取最大值

Math.min取最小值

Math.PI取PI值

toFixed(保留几位小数)

时间

new Date 获取指定时间对象不填是当前

.getFullYear()获取年份

.getMonth月

.getDate日

.getHours小时

getMinutes分钟

getSeconds秒

getDay第几天

getTime时间戳

set设置年月日小时分钟秒钟时间戳

函数名.call()改变this指向

函数名.apply()改变this指向

函数名.bind()返回值改变好了的this指向函数

浏览器属性:

window.innerHeight浏览器高

window.innerWidth浏览器宽

document.documentElement.clientWidth不含滚动条的窗口宽

document.documentElement.clientHeight不含滚动条的窗口高

window.location.href跳转页面 读写

location.relod重新加载页面

location.open(新的页面地址)

location.close()关闭当前页面

history.back历史回退

histor.forward历史前进

history.go()进行历史记录跳转 数值

元素.addEventListener标准浏览器 绑定事件

元素.removeEventListener('事件类型',事件处理函数)移除绑定事件

attachEvent IE低版本浏览器

浏览器事件:

onload加载完毕后执行

onscroll滚动事件

onresize浏览器尺寸改变

docunmentElement(||body).scrollTop浏览器卷去的高度

鼠标事件

click 单机

dblclick 双击

mouseover 鼠标移入 自带事件传播

mouseout 鼠标移出

mouseenter 鼠标移入 阻止事件的传播

mouseleave 鼠标移出

mousemove 鼠标移动

mousedown 鼠标按下

mouseup 鼠标抬起

contextmenu 右键

键盘事件

keydown 键盘按下

keyup 键盘抬起

keypress 键盘按下再抬起

表单事件

blur 失去焦点

focus 获取焦点

change 文本框内容改变 脱离是改变

input 文本框内容改变

submit 表单提交 (专门给 form 标签使用的)

transitionend 过度结束的时候触发

animationend 动画结束的时候触发

selectstart选中事件

timeupdate 音乐视频播放事件 1S4次

视频元素.currentTime返回当前播放时间

触摸事件

touchstart开始触摸

touchmove触摸移动

touchend触摸结束

console.dir()打印详细信息

SetTimeout延时定时器

setInterval间隔定时器

clearTimeout()关闭定时器

获取页面元素

document.documentElenent获取html

document.head 获取head

document.body获取Body

getElementById通过Id获取元素 只有一个

getElementsByClassName通过class名获取元素 得到伪数组

getElementsByTagName通过标签名获取元素

getElementsByName通过元素name获取元素

querySelector通过书写方式获取元素

querySelectorAll获取满足条件的所有元素

元素.childNodes获取一个元素下的所有子节点

元素.children获取元素下所有的元素节点

元素.firstChild元素下第一个子节点

元素.firstElementChild获取第一个元素节点

元素.lastChild获取元素下最后一个子节点

元素.LastElementChild获取元素下最后一个元素节点

元素.previousSibling获取元素的上一个兄弟节点

元素.previousElementSibing获取元素的上一个兄弟元素节点

元素.nextSibling获取元素的下一个兄弟节点

元素.nexElementSibling获取元素的下一个兄弟的元素节点

元素.attributes获取元素的所有属性节点

.getAttribute(属性名)获取元素的属性值

.setAttribute('设置的属性名',设置的属性值)

removeAttribute(删除的属性名)

innerHTML完全覆盖式替换内部结构

innerText替换文本内容

.style获取行内样式或对值进行增删改查

window.getComputedStyle(获取的元素)||元素.currentStyle获取非行内样式

class.name读取类名或者写入新的类名

document.createElement(创造标签)

父元素.appendChild(添加的子节点)

父元素.inserBefore(插入的元素,哪一个元素前)

父元素.replaceChild(新节点,旧节点)替换

父元素.removeChild(删除的节点)

元素.cloneNode(true)克隆节点

document.createDocumentFragment()文档碎片创建筐

clientWidth clientHeight边框内的区域

offsetwidth offsetheight含border的边框区域

offsettop offsetleft 定位父级的左上角距离

offsetX offsetY点击元素的左上角坐标点

clientX clientY 可视窗口的左上角坐标点

pageX pageY 文档流的左上角

event=event||window.event获取事件对象

var target=e.target||e.srcElement .tagName标签名 获取触发事件的元素

IE e.cancelBubble=ture ||e.stopPropagation 取消事件冒泡

IE e.returnValue=false ||e.PreventDefault() || return false 取消默认行为

//正则表达式

new RegExp('')创建正则

.非/n换行的任意字符

\转译

\s空格

\S需要非空格

\d数字

\B非数字

\w数字字母下划线

\W非数字字母下划线

^开始$结尾

+1到正无穷

*0到正无穷

?0或者1次

{n}n次

{n,}至少n次

{n,m}至少n次,最多m次

()集合可以单独捕获

[]任意选择的集合

[^]表示非任意选择集合

|占位一般和小括号一起使用

-一般和中括号一起用,a-b 必须ASCII挨着的

正则表达式.test(字符串)检测字符串

正则表达式.exec(捕获的字符串)

g标识全局 i不分大小写

var ze = new RegExp("^[0-9]+"+param+"[a-z]+$","g")动态添加正则

字符串.search(正则)找符合条件的

字符串.match(正则)有g的时候。捕获到每一个符合的内容

字符串.replace(正则,替换内容)

JSON.stringify(要转换的对象或数组)

JSON.parse(JSON格式的字符串)

let const 变量

prototype函数自带属性

protot

Object.prototype.toString.call()或constructor构造者 检测数据类型

面向对象 calss关键字 class类名

constructor(){}构造函数体

Es6继承

extends 继承

super( 参数)

Object.defineProperty(你要给谁添加,添加的key,配置项{get(){return 'jack'}set(接收一个参数){捕获你想改变的行为}}数据劫持

classList 每一个元素都有一个classList的属性

add(您要添加的类名)用来添加类名的

remove(你要移除的类名)用来移除类名的

replace(你要替换的类名,替换成什么)用来替换类名的

toggle(你要切换的类名)

数组去重set方法

new Set()

size方法和属性

add(你要添加的成员)

delete(你要删除的成员)

clear()把数据集合中的所有内容全部删除

has(你要判断的数据)

forEach(function(){})

...展开

对象

1,set(成员的Key,成员的值)

2,get(获取的成员名称)

3,delete(你要删除的成员名称)

4,clear()用来清除该数据集合中的所有成员

5,forEach()

item拿到的是所有的value

index拿到的是所有的key

arr原始的Map数据集合

6,has()判断该数据集合内有没有某一个数据成员

7,size

8,...展开

获取地址栏?后面部分window.location.search

获取地址栏#后面部分window.location.hash

ecodeURI解码中文

解构