扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
JS图形、图标库推荐:
创新互联公司服务项目包括义马网站建设、义马网站制作、义马网页制作以及义马网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,义马网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到义马省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
1. JS Charts
JS Charts 是个基于JavaScript的图表生成器,不需要任何编码。JS Charts 非常容易使用,只要用户使用客户端脚本(比如,在 web 浏览器中执行)。它不需要多余的插件和服务器模块,只需要下载 JS Charts 的脚本,准备好 XML,JSON 或者 JavaScript 数组数据。
2. Canvasjs
CanvasJS 是个易用的 HTML5 JavaScript 图表库,基于 Canvas 元素。Graphs 可以通过设备渲染,包括 iPhone,iPad,Android,Windows Phone,Microsoft Surface,Desktops 等等。它允许用户创建适用于所有设备,不影响 web 应用程序的功能和可维护性的富仪表盘。CanvcasJS 有着非常漂亮的主题和超过传统的 Flash 和 SVG 图表 10x 倍以上的速度——生成轻量级,漂亮和响应式的仪表图。
3. Chart.js
Chart.js 是个简单的,面向对象的客户端图形库,用户可以用 6 中不同的方式来可视化数据。每个方式都是动画效果的,完全自定义,而且看起来非常好看,即使在 retina 显示。它使用 HTML5 canvas 元素,支持所有现代浏览器,并且支持 IE7/8。
4. Aristochart
Aristochart 是个高度自定义,灵活的折线 Canvas 图表库,允许用户集中精力在图表的审美方面,后台工作做得非常好。Aristochart 有个持续进步的社区,提供许多不断增长的主题给用户选择。
5. xCharts
xCharts 是一个使用 D3.js 来构建漂亮的可定制的数据驱动的 JavaScript图表库,他使用HTML,CSS,SVG实现图表,xCharts 被设计为一个动态的、流畅的、开放的和可定制化的库。
6. BonsaiJS
BonsaiJS 是个轻量级的 JavaScript图形库,提供直观的图形 API 和 SVG 渲染器。主要特性包括:架构分离的运行器和渲染器;iFrame,Worker 和 Node 运行上下文;形状,路径,Assets(音频,图像,字体,subMovies),Keyframe 和常规动画,等等。支持现代化浏览器: Safari, Chrome 和 Firefox。
7. Sigma.js
Sigma.js 是个免费开源的 JavaScript图形库,使用 HTML5 canvas 元素。它的设计是特别为了在 web 界面分享交互式网络 Map 和动态展示网络数据库。
8. Morris.js
Morris.js 是个轻量级的 JavaScript库,使用 jQuery 和 Raphaenuml 来绘制时序图。 Morris.js 生命周期是从代码驱动 howmanyleft.co.uk 图表开始的。它支持的浏览器有: IE6+, Safari/Chrome/Firefox, iOS 3+ 和 Android 3+。它的公共 API 非常的小,只有一个函数: Morris.Line(选项),包括了许多配置选项。
9. Paper.js
Paper.js 是一个开源的向量图形脚本框架,基于 HTML5Canvas 开发。提供清晰的场景图、DOM和大量强大的功能用来创建各种向量图和贝塞尔曲线。
10. AmCharts
AmCharts 是个高级图表库,适用于所有数据的可视化。AmCharts 包括: Column, Bar, Line, Area, Step, Step without risers, Smoothed line, Candlestick, OHLC, Pie/Donut, Radar/ Polar, XY/Scatter/Bubble, Bullet, Funnel/Pyramid 等等。
11. Smoothie Charts
Smoothie Charts是个极小的图表库,专为实时流媒体数据设计的。Joe Walnes 想展示 WebSocket推动的实时的流数据。虽然很多图表库允许用户动态更新数据,但是没有一个是可以优化源源不断的流数据。
12. Dygraphs
Dygraphs 是个快速,灵活,开源的 JavaScript 图表库。它允许用户展示和解析密集的数据集。可以高亮需要强调的数据集。可以使用鼠标点击或者用鼠标拖动来缩放图表;可以修改数值或者点击条目来调整平均周期。
13. Grafico
Grafico 是 Grafico 是一个基于 Raphaël 和 Prototype.js 构建的 JavaScript 图表库,提供了各种图表类型。这些漂亮的图表,有利于传递他们的信息。
14. Highchart JS
Highcharts JS 是一个制作图表的纯 Javascript类库,主要特性如下:兼容性:兼容当今所有的浏览器,包括 iPhone、IE 和火狐等等;对个人用户完全免 费;纯JS,无BS;支持大部分的图表类型:直线图,曲线图、区域图、区域曲线图、柱状图、饼装图、散布图;跨语言:不管是 PHP、Asp.net 还是 Java 都可以使用。
15. Flotr
Flotr 是一个基于 Prototype 开发的 JavaScript绘图工具。支持图例,鼠标跟踪,图片区域选择,图片缩放,添加事件钩子(event hook),通过CSS设置样式等。
16. Flot
Flot 是受 Plotr 和 PlotKit 的 启发,Ole Laursen 基于 jquery 开发了一个图表绘制(WEB Chart)插件并命名为 flot。 flot 是个纯 JavaSript 库,专注于简单的使用方式,迷人的外观和交互式特性。支持的浏览器有: Internet Explorer 6+, Chrome, Firefox 2+, Safari 3+ and Opera 9.5+。
17. jFreeChart
JFreeChart 主要用来各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。JFreeChart 项目历史悠久,而且有大量的开发者在维护。
18. Plotkit
PlotKit 是一个纯 JavaScript 绘图工具包。它支持 HTML Canvas 和 Adobe SVG。有着很完整的文档,方便用户使用。
19. Planetary.js
Planetary.js 是个令人称奇的创建交互式 web 地球仪的 JavaScript库。它使用 D3 和 TopoJSON 来解析和渲染地理信息。Planetary.js 使用基于插件的架构,甚至默认自身就是个插件!这使得 Planetary.js 非常灵活,而且它是允许用户完全自定义,包括颜色,大小,rotation 等等。更重要的是,用户可以在任意位置使用自定义的颜色和大小来显示动画“pings”;它还支持鼠标拖动和缩放,100% 免费和开源。
20. Ember Charts
Ember Charts 是个图表库,使用 Ember.js 和 d3.js 框架构建的。它包括时间线,条形图,饼图和散点图,非常容易扩展和修改。这些图表组件都是开箱即用的,在图表交互和演示方面应用的很好。
21. Sparky
Sparky 是个免费的 JavaScript 波形图库,依赖于 Raphaël ,非常容易使用。支持多个图表类型(折线,条形,area),折线和区域图可以有多个颜色选择。
22. Envision.js
Envision.js 是个 JavaScript 库,用来简化,快速创建交互式的 HTML5 可视化图表。它包括两个图表类型:时序图和 Finance ,提供 API 给开发者,用户可以直接自定义创建图表。这个库氏基于 Flotr2 和 HTML5 Canvas 的。它与框架无关,依赖于几个小的 JavaScript 库。
23. Dc.js
dc.js 是个 JavaScript 图表库,有着原生的 crossfilter, 支持和允许高效展示大型多维数据集(基于 crossfilter 的示例);图表使用 dc.js 渲染,是使用原生数据驱动,所以能得到用户的实时反馈;dc.js 最大的亮点在于能提供一个简单而强大的 JavaScript 库,能进行数据可视化和分析;不仅支持桌面浏览器还支持移动端。
24. ElyCharts
Elycharts 是一个易于使用的,可定制的 JavaScript图表绘制组件。这个组件可用于绘制大部分常用的图表类型包括:line, column, are, bar, pie, sparklines and combinations。它支持多种交互式功能包括:鼠标跟踪、事件处理、利用各种动画高亮显示选择中的区域,Tooltip,HTML锚点等。可以动 态修改数据,并以漂亮的动画效果展示图表中的变化。图表利用SVG/VML技术生成,基于jQuery + Raphaël开发。
25. AwesomeChartJS
AwesomeChartJS Awesome Chart JS 是一个 JavaScript生成图表的类库,它利用了 HTML5 的 canvas 标签来创建统计图表。此类库就是为了减轻开发者的工作量,使用它只需书写几行代码便能生成漂亮的图表。
26. Arbor.js
Arbor.js 是一个利用 Web Works 和 jQuery创建的可视化图形库,它为图形组织和屏幕刷新处理提供了一个高效的、力导向的布局算法。
27. CanvasXpress
canvasXpress 是一个基于HTML5 canvas标签实现的 JavaScript图表类库,它能够支持线性图、柱形图、饼图和热点图等多种常见的图表类型。它所生成的图表交互性很强,鼠标放 上去时会动态显示值。除此之外,它也具有相当高的可定制性,可设置图表的文字、颜色和要显示/隐藏的元素等。当然更重要的一点是,虽然它使用了 HTML5,但是依然支持IE6浏览器。
28. JSXGraph
JSXGraph 是一个支持各种浏览器的交互式几何图库绘制。JSXGraph 使用 SVG 和 VML。
29. Rickshaw
Rickshaw 是一个用于绘制时序图的简单 jS 库,基于 Mike Bostock’s delightful D3 库构建。
30. rGraph
RGraph 是基于HTML5 canvas标签的HTML5 canvas图形库,支持 20 种不同的可视化类型。使用 canvas 标签,RGraph 创建“HTML5 图表”,意味着更快的 web 页面加载和更少的 web 服务器加载。这能帮助减小 web 页面的大小,低能耗和更快的浏览速度。
31. Fusion Chart
FusionCharts Suite XT 是个专业的 JavaScript图表库,能创建任何类型的图表。它创建的图表都是可以进行完全自定义的,标签,字体,边界等等,都可以进行修改。它有很强的交互功能,有许多信息提示,可 点击的 legend 关键字,还有 dril-down,缩放/滚动 和单击打印图表功能。
32. Graph Dracula
Dracula 是用一系列的工具来显示和布局互动图表,包括各种相关的算法。它只是纯 JavaScript 和 SVG ,并无 Flash,Java,其他插件。它非常容易使用,用户可以很简单的自定义任意的元素。
33. Bluff
Bluff 是个 JavaScript 的 Ruby 的 Gruff graphing library端口。它支持所有 Gruff 的特性,但是有着最小的依赖。用户只需要运行一个第三方脚本: JS.Class 副本(压缩后只有 2.6kB ) 和 Google 的 ExCanvas 副本,用来支持 IE 中的 canvas。这两个脚本在 Bluff 中都有下载。Bluff 自身压缩后大小大概有 11KB 。
34. Pizza Pie Chart
Pizza Pie Charts 是个响应式饼图图表,基于 Adobe Snap SVG 框架,通过 HTML 标记和 CSS 来替代 JavaScript 对象,更容易集成各种先进的技术。
35. jGraph
HTML5 图表组件,完全支持l IE 6-8 和触屏设备。 JGraph 自2001年来就一直提供最先进的图表软件组件,是第一个流行的 JGraph Swing 库。然后在 2005 年走在时代的前沿开发 mxGraph。
今天小编要跟大家分享的文章是关于Web前端工程师要掌握的JavaScript代码片段(一)。正在从事web前端工作的小伙伴们来和小编一起看一看吧,希望本篇文章能够对正在从事web前端工作的小伙伴们有所帮助。
1、Anagramsofstring(带有重复项)
使用递归。对于给定字符串中的每个字母,为字母创建字谜。使用map()将字母与每部分字谜组合,然后使用reduce()将所有字谜组合到一个数组中,最基本情况是字符串长度等于2或1。
constanagrams=str={
if(str.length[str];
returnstr.split('').reduce((acc,letter,i)=
acc.concat(anagrams(str.slice(0,i)+str.slice(i+1)).map(val=
letter+val)),[]);
};
//anagrams('abc')-['abc','acb','bac','bca','cab','cba']
2、数组平均数
使用reduce()将每个值添加到累加器,初始值为0,总和除以数组长度。
constaverage=arr=arr.reduce((acc,val)=acc+val,0)/
arr.length;
//average([1,2,3])-2
3、大写每个单词的首字母
使用replace()匹配每个单词的第一个字符,并使用toUpperCase()来将其大写。
constcapitalizeEveryWord=str=str.replace(/\b[a-z]/g,char=
char.toUpperCase());
//capitalizeEveryWord('helloworld!')-'HelloWorld!'
4、首字母大写
使用slice(0,1)和toUpperCase()大写第一个字母,slice(1)获取字符串的其余部分。省略lowerRest参数以保持字符串的其余部分不变,或将其设置为true以转换为小写。(注意:这和上一个示例不是同一件事情)
constcapitalize=(str,lowerRest=false)=
str.slice(0,1).toUpperCase()+(lowerRest?str.slice(1).toLowerCase():
str.slice(1));
//capitalize('myName',true)-'Myname'
5、检查回文
将字符串转换为toLowerCase(),并使用replace()从中删除非字母的字符。然后,将其转换为tolowerCase(),将('')拆分为单独字符,reverse(),join(''),与原始的非反转字符串进行比较,然后将其转换为tolowerCase()。
constpalindrome=str={
consts=str.toLowerCase().replace(/[\W_]/g,'');
returns===s.split('').reverse().join('');
}
//palindrome('tacocat')-true
6、计数数组中值的出现次数
每次遇到数组中的特定值时,使用reduce()来递增计数器。
constcountOccurrences=(arr,value)=arr.reduce((a,v)=v===
value?a+1:a+0,0);
//countOccurrences([1,1,2,1,2,3],1)-3
7、当前URL
使用window.location.href来获取当前URL。
constcurrentUrl=_=window.location.href;
//currentUrl()-''
8、Curry
使用递归。如果提供的参数(args)数量足够,则调用传递函数f,否则返回一个curried函数f。
constcurry=(fn,arity=fn.length,...args)=
arity
?fn(...args)
:curry.bind(null,fn,arity,...args);
//curry(Math.pow)(2)(10)-1024
//curry(Math.min,3)(10)(50)(2)-2
9、Deepflattenarray
使用递归,使用reduce()来获取所有不是数组的元素,flatten每个元素都是数组。
constdeepFlatten=arr=
arr.reduce((a,v)=a.concat(Array.isArray(v)?deepFlatten(v):v),
[]);
//deepFlatten([1,[2],[[3],4],5])-[1,2,3,4,5]
10、数组之间的区别
从b创建一个Set,然后在a上使用Array.filter(),只保留b中不包含的值。
constdifference=(a,b)={consts=newSet(b);returna.filter(x
=!s.has(x));};
//difference([1,2,3],[1,2])-[3]
11、两点之间的距离
使用Math.hypot()计算两点之间的欧几里德距离。
constdistance=(x0,y0,x1,y1)=Math.hypot(x1-x0,y1-y0);
//distance(1,1,2,3)-2.23606797749979
12、可以按数字整除
使用模运算符(%)来检查余数是否等于0。
constisDivisible=(dividend,divisor)=dividend%divisor===0;
//isDivisible(6,3)-true
13、转义正则表达式
使用replace()来转义特殊字符。
constescapeRegExp=str=str.replace(/[.*+?^${}()|[\]\\]/g,
'\\$');
//escapeRegExp('(test)')-\\(test\\)
14、偶数或奇数
使用Math.abs()将逻辑扩展为负数,使用模(%)运算符进行检查。如果数字是偶数,则返回true;如果数字是奇数,则返回false。
constisEven=num=num%2===0;
//isEven(3)-false
15、阶乘
使用递归。如果n小于或等于1,则返回1。否则返回n和n-1的阶乘的乘积。
constfactorial=n=n
//factorial(6)-720
16、斐波那契数组生成器
创建一个特定长度的空数组,初始化前两个值(0和1)。使用Array.reduce()向数组中添加值,后面的一个数等于前面两个数相加之和(前两个除外)。
constfibonacci=n=
Array(n).fill(0).reduce((acc,val,i)=acc.concat(i1?acc[i-
1]+acc[i-2]:i),[]);
//fibonacci(5)-[0,1,1,2,3]
17、过滤数组中的非唯一值
将Array.filter()用于仅包含唯一值的数组。
constfilterNonUnique=arr=arr.filter(i=arr.indexOf(i)===
arr.lastIndexOf(i));
//filterNonUnique([1,2,2,3,4,4,5])-[1,3,5]
18、Flatten数组
使用reduce()来获取数组中的所有元素,并使用concat()来使它们flatten。
constflatten=arr=arr.reduce((a,v)=a.concat(v),[]);
//flatten([1,[2],3,4])-[1,2,3,4]
19、从数组中获取最大值
使用Math.max()与spread运算符(...)结合得到数组中的最大值。
constarrayMax=arr=Math.max(...arr);
//arrayMax([10,1,5])-10
20、从数组中获取最小值
使用Math.min()与spread运算符(...)结合得到数组中的最小值。
constarrayMin=arr=Math.min(...arr);
//arrayMin([10,1,5])-1
21、获取滚动位置
如果已定义,请使用pageXOffset和pageYOffset,否则使用scrollLeft和scrollTop,可以省略el来使用window的默认值。
constgetScrollPos=(el=window)=
({x:(el.pageXOffset!==undefined)?el.pageXOffset:el.scrollLeft,
y:(el.pageYOffset!==undefined)?el.pageYOffset:el.scrollTop});
//getScrollPos()-{x:0,y:200}
22、最大公约数(GCD)
使用递归。基本情况是当y等于0时。在这种情况下,返回x。否则,返回y的GCD和x/y的其余部分。
constgcd=(x,y)=!y?x:gcd(y,x%y);
//gcd(8,36)-4
23、Headoflist
返回ARR[0]
consthead=arr=arr[0];
//head([1,2,3])-1
24、list初始化
返回arr.slice(0,-1)
constinitial=arr=arr.slice(0,-1);
//initial([1,2,3])-[1,2]
以上就是小编今天为大家分享的关于Web前端工程师要掌握的JavaScript代码片段(一)的文章,希望本篇文章能够对正在从事web前端工作的小伙伴们有所帮助。想要了解更多web前端相关知识和想要了解后面的代码片段的小伙伴,记得关注北大青鸟web培训官网。
AngularJS 是Web前端开发中的一个 JavaScript 框架,目前在前端中使用率也是非常高的,也是Web前端开发者以动态形式开发时最喜欢的框架之一。如果你是一个前端开发者希望基于AngularJS启动一个项目,你需要筛选众多的工具。为了减少用AngularJS开发的负担,下面源码时代Web前端培训小编为大家介绍20款最新的工具,主要涉及测试、前端开发、IDE编辑器、文本编辑器、优秀库、模块、扩展、代码生成器、网格工具等等。
1.Karma–是一个简单的javascript测试工具,它允许在多个真正的浏览器执行JavaScript代码..提供了完美的测试环境,允许你在真实的浏览器和设备比如手机和平板电脑上测试应用。
2.Protractor –是一款端对端的测试框架。这个Node.js项目建立在WebDriverJS之上。它在真实浏览器上运行测试,与其交互就如任何正常用户使用一样。
3. Jasmine –这款行为驱动测试框架不依赖于浏览器、DOM或者任何JavaScript框架,因此对于任何Node.项目或者任何JavaScript运行的地方都非常适合。
4. Djangular –这是一款可重用的应用,可以提供更好的AngularJS集成。有了此工具的帮助,你可以为每个应用创建 AngularJS内容。
5. Ment.io –这款工具引入了mention部件和宏控件,并不依赖于jQuery。你可以应用ment.io指令作用于任何元素,并且它允许可选择的文本输入。
6. Angular Kickstart –这款工具加速了AngularJS开发,并伴随可扩展的构建系统,简化了开发过程。
7. AngularFire –用此工具,你可以轻松创建 Angular 应用后台。灵活的API,3种数据绑定方式以及快速开发能力使得开发变得轻松。
8. Mocha.js –这是一款运行在node.js和浏览器上的功能丰富的测试框架。允许异步测试,能灵活准确的报告与映射。
9. SublimeText –对于开发者来说最好的一款文本代码编辑器,使得编写代码简单化。比起其他文本编辑器,许多开发者更喜欢用Sublime Text.
10. Restangular –这款工具简化了常见的GET, POST, DELETE, UPDATES请求,使用更简短的代码。对于任何通过 RESTful API 进行数据操作的 Web 应用都是理想化的工具。
11. Generator Angular –这款工具可以帮助你快速的设置项目的默认结构。它能输出让你快速开始app开发的模板。
12. NG-Inspector –这是一个Chrome 和Safari 浏览器扩展,安装成功后会出现先审查面板中,帮助你开发、调试和深入理解 AngularJS 应用。它使得更容易标识和显示Controllers 和Directives中的scope。
13. Angular Seed –这个一个典型的AngularJS web app开发框架,它可以让你在开发环境快速启动angular app。
14. Code Orchestra –这是一个前端开发工具,它允许你所见即所得方式开发代码。一旦你保存修改了的代码,它使用一个特殊的协议自动的显示出来。
15. Videogular –这是一个针对AngularJS的基于HTML5的视频播放库,它使得在你的app中使用视频或其他多媒体更容易。
16. Webstorm –它是一个智能的代码编辑器,支持JavaScript, Node.js, HTML和CSS等等以及它们对应下一代的继任者。它能工作在所有的先进技术下,对大部分开发者来说,使用它是一个很好的选择。
17. Angular GetText –这是超级简单的翻译工具,你只需输入英文文本,标记它需要翻译,它就会翻译。
18. Angular Deckgrid –这是一个轻量级的表格,它没有自己的展现样式,完全依赖于你定义在CSS中的样式。
19. Angularjs UI –这是一个UI组件集合库,它有很多有用的指令来帮你快速的开发Angular应用。它使用指令来代替组件,如:ui-router, ui-map, and ui-calendar。
20. Mean –它是一个使用MongoDB, Node.js, Express和AngularJS apps的简单而完美的模板。它捆绑和配置了一些模块,如: Mongoose 、Passport。
21. Wijmo –这是新一代HTML5/ JavaScript UI控件。大而全面的前端开发工具包,全面支持Angular 2。
22. VS Code(Visual Studio Code)是由微软研发的一款免费、开源的跨平台文本(代码)编辑器。几乎完美的编辑器。
源码时代:
今天小编要跟大家分享的文章是关于Web前端工程师应该知道的提高JavaScript
技能的技巧!熟悉web前端工作的小伙伴都知道,JavaScript是前端工程师的必备技能。JavaScript
是一种复杂的语言。如果是你是高级或者初级web开发人员,了解它的基本概念非常重要。本篇文章小编就为大家介绍几种提高JavaScript
技能的技巧,下面让我们一起来看一看吧!
01、变量赋值(值vs引用)
理解JavaScript如何给变量赋值可以帮助我们减少一些不必要的bug。如果你不理解这一点,可能很容易地编写被无意中更改值的代码。
JavaScript总是按照值来给变量赋值。这一部分非常重要:当指定的值是JavaScript的五种基本类型之一(即
Boolean,null,undefined,String和Number)时,将分配实际值。但是,当指定的值是
Array,Function或Object时,将分配对内存中对象的引用给变量。
在以下代码段中,使用var1对var2进行赋值。由于var1是基本类型(String),因此var2的值等于var1的String
值,并且可以认为此时与var1完全不同。因此,重新赋值var2对var1没有影响。
letvar1='Mystring';
letvar2=var1;
var2='Mynewstring';
console.log(var1);
//'Mystring'
console.log(var2);
//'Mynewstring'
接着,与对象赋值进行比较。
letvar1={name:'Jim'}
letvar2=var1;
var2.name='John';
console.log(var1);
//{name:'John'}
console.log(var2);
//{name:'John'}
如果你期望它会像原始类型赋值那样,很可能会出问题!如果你创建了一个无意中会改变对象的函数,就会出现一些非预期的行为。
02、闭包
闭包是一个重要的JavaScript模式,可以私有访问变量。在本例中,createGreeter返回一个匿名函数,这个函数可以访问参数
greeting(在这里是“Hello”)。在后续的调用中,sayHello将有权访问这个greeting!
functioncreateGreeter(greeting){
returnfunction(name){
console.log(greeting+','+name);
}
}
constsayHello=createGreeter('Hello');
sayHello('Joe');
//Hello,Joe
在更真实的场景中,你可以设想一个初始函数apiConnect(apiKey),它返回一些使用APIkey的方法。在这种情况下,apiKey
只需要提供一次即可。
functionapiConnect(apiKey){
functionget(route){
returnfetch(`${route}?key=${apiKey}`);
}
functionpost(route,params){
returnfetch(route,{
method:'POST',
body:JSON.stringify(params),
headers:{
'Authorization':`Bearer${apiKey}`
}
})
}
return{get,post}
}
constapi=apiConnect('my-secret-key');
//NoneedtoincludetheapiKeyanymore
api.get('#/get-endpoint');
api.post('#/post-endpoint',{name:'Joe'});
03、解构
JavaScript参数解构可以从对象中干中提取所需属性的常用方法。
constobj={
ame:'Joe',
food:'cake'
}
const{name,food}=obj;
console.log(name,food);
//'Joe''cake'
如果要以其他名称提取属性,可以使用如下方式:
constobj={
ame:'Joe',
food:'cake'
}
const{name:myName,food:myFood}=obj;
console.log(myName,myFood);
//'Joe''cake'
解构经常也用于直接用于提取传给函数的参数。如果你熟悉React,可能已经见过这个:
constperson={
ame:'Eddie',
age:24
}
functionintroduce({name,age}){
console.log(`I'm${name}andI'm${age}yearsold!`);
}
console.log(introduce(person));
//"I'mEddieandI'm24yearsold!"
04、展开运算
ES6的一个常用之一的特性就是展开(...)运算符了,在下面的例子中,Math.max不能应用于arr
数组,因为它不将数组作为参数,但它可以将各个元素作为参数传入。展开运算符...可用于提取数组的各个元素。
constarr=[4,6,-1,3,10,4];
constmax=Math.max(...arr);
console.log(max);
//10
05、剩余参数
剩余参数语法和展开语法看起来的一样的,不同的是展开语法是为了结构数组和对象;而剩余参数和展开运算符是相反的,剩余参数收集多个元素合成一个数组。
functionmyFunc(...args){
console.log(args[0]+args[1]);
}
myFunc(1,2,3,4);
//3
restparameters和arguments的区别
1.arguments是伪数组,包含所有的实参
2.剩余参数是标准的数组,可以使用数组的方法
06、数组方法
JavaScript数组方法通常可以提供令人难以置信的、优雅的方法来执行所需的数据转换。作为StackOverflow
的贡献者,我经常看到关于如何以某种方式操纵对象数组的问题,这往往也是数组方法的完美用例。
map、filter、reduce
JavaScript数组方法map、filter和reduce容易混淆,这些都是转换数组或返回聚合值的有用方法。
map:返回一个数组,其中每个元素都使用指定函数进行过转换。
constarr=[1,2,3,4,5,6];
constmapped=arr.map(el=el+20);
console.log(mapped);
//[21,22,23,24,25,26]
filter:返回一个数组,只有当指定函数返回true时,相应的元素才会被包含在这个数组中。
constarr=[1,2,3,4,5,6];
constfiltered=arr.filter(el=el===2||el===4);
console.log(filtered);
//[2,4]
reduce:按函数中指定的值累加
constarr=[1,2,3,4,5,6];
constreduced=arr.reduce((total,current)=total+current);
console.log(reduced);
//21
find,findIndex,indexOf
find:返回与指定条件匹配的第一个实例,如果查到不会继续查找其他匹配的实例。
constarr=[1,2,3,4,5,6,7,8,9,10];
constfound=arr.find(el=el5);
console.log(found);
//6
再次注意,虽然5之后的所有元素都满足条件,但是只返回第一个匹配的元素。当你发现匹配项时,通常会中断for循环,在这种情况下,这实际上非常有用。
findIndex:这与find几乎完全相同,但不是返回第一个匹配元素,而是返回第一个匹配元素的索引。
constarr=['Nick','Frank','Joe','Frank'];
constfoundIndex=arr.findIndex(el=el==='Frank');
console.log(foundIndex);
//1
indexOf:与findIndex几乎完全相同,但它不是将函数作为参数,而是采用一个简单的值。
当w你需要更简单的逻辑并且不需要使用函数来检查是否存在匹配时,可以使用此方法。
constarr=['Nick','Frank','Joe','Frank'];
constfoundIndex=arr.indexOf('Frank');
console.log(foundIndex);
//1
push,pop,shift,unshift
push:这是一个相对简单的方法,它将一个项添加到数组的末尾。它就地修改数组,函数本身会返回添加到数组中的项。
letarr=[1,2,3,4];
constpushed=arr.push(5);
console.log(arr);
//[1,2,3,4,5]
console.log(pushed);
//5
pop:这将从数组中删除最后一项。同样,它在适当的位置修改数组,函数本身返回从数组中删除的项。
letarr=[1,2,3,4];
constpopped=arr.pop();
console.log(arr);
//[1,2,3]
console.log(popped);
//4
shift:从数组中删除第一项。同样,它在适当的位置修改数组。函数本身返回从数组中删除的项。
letarr=[1,2,3,4];
constshifted=arr.shift();
console.log(arr);
//[2,3,4]
console.log(shifted);
//1
unshift:将一个或多个元素添加到数组的开头。同样,它在适当的位置修改数组。与许多其他方法不同,函数本身返回数组的新长度。
letarr=[1,2,3,4];
constunshifted=arr.unshift(5,6,7);
console.log(arr);
//[5,6,7,1,2,3,4]
console.log(unshifted);
//7
splice,slice
splice:通过删除或替换现有元素和/或添加新元素来更改数组的内容,此方法会修改了数组本身。
下面的代码示例的意思是:在数组的位置1上删除0个元素,并插入b。
letarr=['a','c','d','e'];
arr.splice(1,0,'b')
slice:从指定的起始位置和指定的结束位置之前返回数组的浅拷贝。如果未指定结束位置,则返回数组的其余部分。
重要的是,此方法不会修改数组,而是返回所需的子集。
letarr=['a','b','c','d','e'];
constsliced=arr.slice(2,4);
console.log(sliced);
//['c','d']
console.log(arr);
//['a','b','c','d','e']
sort
sort:根据提供的函数对数组进行排序。这个方法就地修改数组。如果函数返回负数或0,则顺序保持不变。如果返回正数,则交换元素顺序。
letarr=[1,7,3,-1,5,7,2];
constsorter=(firstEl,secondEl)=firstEl-secondEl;
arr.sort(sorter);
console.log(arr);
//[-1,1,2,3,5,7,7]
07、Generators(生成器)
生成器是一种特殊的行为,实际上是一种设计模式,我们通过调用next()方法来遍历一组有序的值。想象一下,例如使用遍历器对数组[1,2,3,4,5]进行遍历。第一次调用next()方法返回1,第二次调用next()方法返回2,以此类推。当数组中的所有值都返回后,调用next()方法将返回null或false或其它可能的值用来表示数组中的所有元素都已遍历完毕。
function*greeter(){
yield'Hi';
yield'Howareyou?';
yield'Bye';
}
constgreet=greeter();
console.log(greet.next().value);
//'Hi'
console.log(greet.next().value);
//'Howareyou?'
console.log(greet.next().value);
//'Bye'
console.log(greet.next().value);
//undefined
使用生成器生成无限个值:
function*idCreator(){
leti=0;
while(true)
yieldi++;
}
constids=idCreator();
console.log(ids.next().value);
//0
console.log(ids.next().value);
//1
console.log(ids.next().value);
//2
//etc...
08、恒等运算符(===)与相等运算符(==)
大家一定要知道JavaScript中的恒等运算符(===)和相等运算符(==)之间的区别!
==运算符在比较值之前会进行类型转换,而===运算符在比较之前不会进行任何类型转换。
console.log(0=='0');
//true
console.log(0==='0');
//false
09、对象比较
我看到JavaScript新手所犯的错误是直接比较对象。变量指向内存中对象的引用,而不是对象本身!实际比较它们的一种方法是将对象转换为JSON
字符串。这有一个缺点:对象属性顺序不能保证!比较对象的一种更安全的方法是引入专门进行深度对象比较的库(例如,lodash的isEqual)。
下面的对象看起来是相等的,但实际上它们指向不同的引用。
constjoe1={name:'Joe'};
constjoe2={name:'Joe'};
console.log(joe1===joe2);
//false
相反,下面的计算结果为true,因为一个对象被设置为与另一个对象相等,因此指向相同的引用(内存中只有一个对象)。
constjoe1={name:'Joe'};
constjoe2=joe1;
console.log(joe1===joe2);
//true
相反,以下计算结果为true,因为一个对象设置为等于另一个对象,因此指向相同的引用(内存中只有一个对象)。
constjoe1={name:'Joe'};
constjoe2=joe1;
console.log(joe1===joe2);
//true
10、回调函数
很多人都被JavaScript回调函数吓倒了!他们很简单,举个例子。console.log函数作为回调传递给myFunc。
它在setTimeout完成时执行。
functionmyFunc(text,callback){
setTimeout(function(){
callback(text);
},2000);
}
myFunc('Helloworld!',console.log);
//'Helloworld!'
11、Promises
一旦你理解了JavaScript回调,很快就会发现自己陷入了“回调地狱”中。这个时候可以使用promise,将异步逻辑包装在promise
中,成功时resolve或在失败时reject使用“then”来处理成功的情况,使用catch来处理异常。
constmyPromise=newPromise(function(res,rej){
setTimeout(function(){
if(Math.random()
returnres('Hooray!');
}
returnrej('Ohno!');
},1000);
});
myPromise
.then(function(data){
console.log('Success:'+data);
})
.catch(function(err){
console.log('Error:'+err);
});
//IfMath.random()returnslessthan0.9thefollowingislogged:
//"Success:Hooray!"
//IfMath.random()returns0.9orgreaterthefollowingislogged:
//"Error:Onno!"
12、Async/Await
在掌握了promise的用法后,你可能也会喜欢asyncawait,它只是一种基于promise
的“语法糖”。在下面的示例中,我们创建了一个async函数,并awaitgreeterpromise。
constgreeter=newPromise((res,rej)={
setTimeout(()=res('Helloworld!'),2000);
})
asyncfuncti
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流