代码改变世界

随笔分类 -  JavaScript

揭秘 0.1 + 0.2 != 0.3

2016-10-25 10:13 by Barret李靖, 5150 阅读, 收藏, 编辑
摘要: “0.1 + 0.2 = ?”,这道题如果给小学生,他会立马告诉你答案是 0.3,但是交给一些程序去计算,结果就不是那么简单了。 事实上,不仅仅是 JS,在其他采用 IEEE754 浮点数标准的语言中,0.1 + 0.2 都不会等于 0.3,但是 0.2 + 0.3 却等于 0.5,这是为何?想必这 阅读全文

ECMAScript 6 扫盲

2016-07-11 12:40 by Barret李靖, 12834 阅读, 收藏, 编辑
摘要: ECMAScript 6 目前基本成为业界标准,它的普及速度比 ES5 要快很多,主要原因是现代浏览器对 ES6 的支持相当迅速,尤其是 Chrome 和 Firefox 浏览器,已经支持 ES6 中绝大多数的特性。 阅读全文

如何快速定位不小心暴露到全局的变量

2015-07-09 11:40 by Barret李靖, 3242 阅读, 收藏, 编辑
摘要: 今天在查看页面控制台的时候,无意中看到了一个暴露到全局的变量 i,全局变量是不会被压缩工具压缩成简写的字母,这个被频繁使用的变量名暴露到全局也是个相当大的隐患,可能一个不小心就覆盖了第二次暴露到全局的同名变量。刚开始我就怀疑是自己出现了这样愚蠢的错误:function A() { // 在一个... 阅读全文

细嗅Promise

2014-09-29 20:39 by Barret李靖, 11182 阅读, 收藏, 编辑
摘要: 读完这篇文章,预计会消耗你 40 分钟的时间。Ajax 出现的时候,刮来了一阵异步之风,现在 Nodejs 火爆,又一阵异步狂风刮了过来。需求是越来越苛刻,用户对性能的要求也是越来越高,随之而来的是页面异步操作指数般增长,如果不能恰当的控制代码逻辑,我们就会陷入无穷的回调地狱中。ECMAScript... 阅读全文

如何让你的JavaScript代码更加语义化

2014-08-20 23:07 by Barret李靖, 10101 阅读, 收藏, 编辑
摘要: 语义化这个词在 HTML 中用的比较多,即根据内容的结构化选择合适的标签。其作用不容小觑:赋予标签含义,让代码结构更加清晰,虽然我们可以在标签上添加 class 来标识,但这种通过属性来表示本体的形式会显得不够直接,而且在一定程度上也有冗余。优化搜索引擎(SEO),结构良好的网页对搜索引擎的亲和力是... 阅读全文

ECMAScript 6入门

2014-05-02 21:42 by Barret李靖, 5936 阅读, 收藏, 编辑
摘要: 预计在2014年底,ECMAScript 6将会正式发布,他的草案在13年3月份被冻结,后续提出新特性将会移至ECMASript 7中。目前还没有哪款浏览器实现了ES6的全部内容,兼容性最强的一款要数FireFox了。具体情况可以在这里查看。关于 ECMAScript 6 草案,我在博客里头复制了一... 阅读全文

NodeJS写个爬虫,把文章放到kindle中阅读

2014-04-28 01:41 by Barret李靖, 7801 阅读, 收藏, 编辑
摘要: 这两天看了好几篇不错的文章,有的时候想把好的文章 down 下来放到 kindle 上看,便写了个爬虫脚本,因为最近都在搞 node,所以就很自然的选择 node 来爬咯~本文地址:http://www.cnblogs.com/hustskyking/p/spider-with-node.html,... 阅读全文

深入浅出NodeJS——数据通信,NET模块运行机制

2014-04-22 02:11 by Barret李靖, 10933 阅读, 收藏, 编辑
摘要: 互联网的运作,最根本的驱动就是信息的交互,NodeJS 在数据交互这一块做的很带感,异步编程让人很惬意,关于 NodeJS 的数据通信,最基础的两个模块是 NET 和 HTTP,前者是基于 TCP 的封装,后者本质还是 TCP 层,只不过做了比较多的数据封装,我们视之为更高层。本文先述说 NodeJ... 阅读全文

换个标签写前端模板

2014-04-13 14:21 by Barret李靖, 3306 阅读, 收藏, 编辑
摘要: 前端模板中,我们通常使用 script/textarea 来存放模板代码,然后使用 innerHTML/value 属性来获取模板内容进行解析和拼装。关于 tplEngine 这个 Javascript 模板引擎,之前也写了篇 文章 介绍过,这里就不赘述了。除了使用 script 标签,textarea 也可以达到同样的效果,但是本文叙述的重点并不是如何去解析一个 JavaScript 模板。W3C工作组在 HTML 中加入了一个新的标签 ——TEMPLATE。他提供了一个可以定义 HTML 代码片段的机制,下面就来详细说说这个 TEMPLATE 标签。本文地址:http://www.cnbl 阅读全文

百万数据如何在前端快速流畅显示?

2014-03-25 00:54 by Barret李靖, 12718 阅读, 收藏, 编辑
摘要: 如果要在前端呈现大量的数据,一般的策略就是分页。前端要呈现百万数据,这个需求是很少见的,但是展示千条稍微复杂点的数据,这种需求还是比较常见,只要内存够,javascript 肯定是吃得消的,计算几千上万条数据,js 效率根本不在话下,但是 DOM 的渲染浏览器扛不住,CPU 稍微搓点的电脑必然会卡爆。本文的策略是,显示三屏数据,其他的移除 DOM。本文地址:http://www.cnblogs.com/hustskyking/p/million-data-show-in-front-end.html,转载请注明源地址。一、 策略下面是我简单勾画的一个草图,我们把一串数据放到一个容器当中,这串数 阅读全文

Javascript分号,加还是不加?

2014-03-16 15:51 by Barret李靖, 8467 阅读, 收藏, 编辑
摘要: 关于这个问题,网上已经有很多人讨论过了,我先说说自己对这个问题的回答:加!(但非必须)有些人写代码,懒得加分号,除非是迫不得已才勉强放一个分号上去。如果你可以保证你写的代码不出现任何 bug,那当然是没有问题,但是很多 JSer 新人,对一些隐含的问题并不是特别清楚,很容易在不知不觉中写出一堆 bug,我们先来了解下 JS 词法语法解析的时候,哪些情况下会自动插入分号。一、自动插入分号的规则注:鼠标滑过文字可以看到翻译原文1. 程序从左到右解析,当纳入下一个 token 无法匹配任何语法:如该 token 跟之前的 token 之间有至少一个 LineTerminal 行终结符违反分割该 to 阅读全文

你所不知道的JavaScript数组

2014-03-03 13:56 by Barret李靖, 12734 阅读, 收藏, 编辑
摘要: 相信每一个 javascript 学习者,都会去了解 JS 的各种基本数据类型,数组就是数据的组合,这是一个很基本也十分简单的概念,他的内容没多少,学好它也不是件难事情。但是本文着重要介绍的并不是我们往常看到的 Array,而是 ArrayBuffer。我写的很多东西都是因为要完成某些特定的功能而刻意总结的,可以算是备忘,本文也是如此!前段时间一直在研究 Web Audio API 以及语音通信相关的知识,内容侧重于音频流在 AudioContext 各个节点之间的流动情况,而现在要摸清楚音频到流底是个什么样的数据格式,所以对 ArrayBuffer 的研究就显得格外重要了。本文地址:http 阅读全文

让你的页面瞬间全屏

2014-03-01 03:11 by Barret李靖, 17218 阅读, 收藏, 编辑
摘要: @update 文章下方有更新,提到了更多全屏的知识以及错误的矫正。页面全屏是一个体验非常棒的功能,他可以让你的视觉焦点聚集在你想关注的元素块上。很多浏览器都支持全屏,按下 F11,哦了! 页面全屏了~但是本文要说的并不是这种全屏。当页面中有个小 DEMO 或者小游戏要展示的时候,用户期望,这个 DEMO 或者游戏可以在全屏下展示,本文就教你如何来展示。如果你是非 IE 浏览器进入的该页面,你可能已经看到了页面上发生了一点小变化,多个东西:没错,多了个“进入全屏”的按钮,这就是本文要介绍的内容!本文地址:http://www.cnblogs.com/hustskyking/p/javascri 阅读全文

[Voice communications] 声音的滤波

2014-02-28 13:57 by Barret李靖, 4446 阅读, 收藏, 编辑
摘要: 本系列文章主要是介绍 Web Audio API 的相关知识,以及 web语音通信 中会遇到的一些问题,阐述可能存在错误,还请多多斧正!通过设备获取音频流会不可避免的渗入一些杂音,这些杂音可能来自你周边的环境,也有可能来自录音设备本身,一些低频的声音还好,人耳难以分辨出来,但是那些高频的白噪声对音质的影响是特别大的,如我们听收音机没有调到正确的频率上,会听到吱吱兹兹的刺耳的杂音。这些杂音不仅增大了音频流信号本身的体积,而且我们的耳朵也不喜欢,所以在传输之前必须对音频做相应的滤波处理。本文地址:http://www.cnblogs.com/hustskyking/p/webAudio-filte 阅读全文

[Voice communications] 声道的转换

2014-02-27 13:17 by Barret李靖, 2510 阅读, 收藏, 编辑
摘要: 本系列文章主要是介绍 Web Audio API 的相关知识,以及 web语音通信 中会遇到的一些问题,阐述可能存在错误,还请多多斧正!很多粤语剧都提供了两个声道,一个左声道为粤语,一个右声道有国语。观看者可以自由切换声道,那么切换声道的原理是什么呢?在播放器中,只需要把不同的声道切换到声轨就行了,因为有左右两个声道,所以播放器至少是包含两个声轨的。如果我们想听粤语,只需要将右声道声轨的声音设置为 0,或者临时删掉右声道声轨。本文主要是利用 GainNode 节点控制音量的属性实现两个音轨之间的相互切换,Cross-fading 的意思可以在后面的 DEMO 中用耳朵体会出来~本文地址:htt 阅读全文

[Voice communications] 音量的控制

2014-02-26 12:56 by Barret李靖, 3264 阅读, 收藏, 编辑
摘要: 改变音频的音量是音频处理中最基础的部分,我们可以利用 GainNode 来构建 Mixers 的结构块。GainNode 的接口是很简单的:interface GainNode : AudioNode { readonly attribute AudioParam gain;};通过调节 GainNode.gain.value 就可以实现音频大小的调控了。下文会先介绍使用 Processor 来处理,这是一个最通用的节点,可以处理很多东西。在上文看得到的音频流中我们也使用了该节点。本文地址:http://www.cnblogs.com/hustskyking/p/webAudio-vol... 阅读全文

[Voice communications] 看得到的音频流

2014-02-22 20:45 by Barret李靖, 2676 阅读, 收藏, 编辑
摘要: 上文介绍了 Web Audio API 的相关知识,以及如何在你的 web 程序中引入 音频流,内容都是介绍性的,所以没有写太多 DEMO。本文重点讲解如何利用 Web Audio API 中的中间节点拿到音频信号的信息,并将信息转化成信号图绘制到 canvas 中。从上文中我们了解到,AudioContext 是音频播放和处理的一个环境,大概的流程是这个样子: +---------------+------------------------------------+ | AudioContext | | +---... 阅读全文

[Voice communications] 让音乐响起来

2014-02-20 12:47 by Barret李靖, 2770 阅读, 收藏, 编辑
摘要: 本系列文章主要是介绍 Web Audio API 的相关知识,由于该技术还处在 web 草案阶段(很多标准被提出来,至于取舍需要等待稳定版文档来确定,草案阶段的文档很多都会被再次编辑甚至重写、全部删除等,不适合作为正式参考),很多 API 都是未确定的,目前支持 Web Audio API 的浏览器是较新版的 Google Chrome 和 FireFox,其他浏览器暂时还没有兼容。现在的网络硬件环境还没有达到普遍语音通信的条件,但是 web语音通信 一定会成为后期 web 研究的一个重要话题,凭着一点个人兴趣,拿出来研究研究~本文主要介绍 Web Audio API 的相关特性,以及音频源的 阅读全文

[解惑]JavaScript事件机制

2014-02-17 21:18 by Barret李靖, 17158 阅读, 收藏, 编辑
摘要: 群里童鞋问到关于事件传播的一个问题:“事件捕获的时候,阻止冒泡,事件到达目标之后,还会冒泡吗?”。初学 JS 的童鞋经常会有诸多疑问,我在很多 QQ 群也混了好几年了,耳濡目染也也收获了不少,以后会总结下问题的结论,顺便说说相关知识的扩展~如果贸然回答还会冒泡,这不太好的,稍微严谨点考虑 0级 DOM 事件模型的话,这个答案是否定的。但是在 2级 DOM 事件模型中,答案是肯定的,这个问题值得探讨记录下。本文地址:http://www.cnblogs.com/hustskyking/p/problem-javascript-event.html一、问题结论netscape 和 微软 曾经的战争 阅读全文

JavaScript多文件下载

2014-02-12 21:50 by Barret李靖, 40809 阅读, 收藏, 编辑
摘要: 对于文件的下载,可以说是一个十分常见的话题,前端的很多项目中都会有这样的需求,比如 highChart 统计图的导出,在线图片编辑中的图片保存,在线代码编辑的代码导出等等。而很多时候,我们只给了一个链接,用户需要右键点击链接,然后选择“另存为”,这个过程虽说不麻烦,但还是需要两步操作,倘若用户想保存... 阅读全文