King Mui

用艺术的眼光发现技术的美

前言

TypeScript 是由安德斯·海尔斯伯格(Anders Hejlsberg)在微软开发的严格超集语言,是 JavaScript 的一个强类型版本。任何 JavaScript 中的特性都可以在 TypeScript 中使用,这也就意味着我们可以运用已熟知的 JavaScript 技能,以及以前不支持的编码功能去开发复杂的大型应用,从而提高代码的可读性和可维护性。此外,TypeScript 还提供了诸如类型推断、联合类型、类型保护和泛型等高级特性,以便我们可以更好地处理日趋复杂的代码库。

为什么需要 TypeScript

TypeScript 为 JavaScript 添加了类型系统的支持。使用 TypeScript 的好处有很多,例如:

  • 代码即文档
  • 编译器自动提示
  • 一定程度上能够避免低级 bug
  • 代码的可维护性更强

TypeScript 可以让我们在编写 JavaScript 代码时拥有更好的代码质量和更强的编译时错误检查。在开发阶段能够帮助我们更快速、更精准地定位问题,以降低代码在运行时才能引发错误的风险。并且在开发大型项目时,TypeScript 的类型系统可以帮助我们更好地组织代码,使团队成员能够更快地了解项目。

TypeScript 的高级特性

操作符

TypeScript 支持 JavaScript 中的大多数操作符,包括算数、关系、逻辑、位、赋值、条件、类型转换和其他操作符。此外,TypeScript 还提供了一些额外的特殊操作符,如类型保护断言操作符。

阅读全文 »

JS 语言不像 C/C++,让程序员自己去开辟或者释放内存,而是类似 Java,采用自己的一套垃圾回收算法进行自动的内存管理。作为一名资深前端工程师,需要对 JS 的内存回收机制非常清楚,以便在极端的环境下能够分析出系统性能的瓶颈,另一方面,学习这其中的机制,也对我们深入理解 JS 的闭包特性、以及对内存的高效使用,都有很大的帮助。

垃圾回收机制

V8 的垃圾回收策略基于分代回收机制,该机制又基于世代假说。该假说有两个特点:

  1. 大部分新生对象倾向于早死
  2. 不死的对象,会活得更久

基于这个理论,现代垃圾回收算法根据对象的存活时间将内存进行了分代,并对不同分代的内存采用不同的高效算法进行垃圾回收。

阅读全文 »

历史上,JS 一直没有模块(module)体系,无法将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来。其他语言都有这项功能,比如 Ruby 的 require、Python 的 import,甚至就连 CSS 都有 @import,但是 JS 任何这方面的支持都没有,这对开发大型复杂的项目形成了巨大障碍。

在 ES6 出来之前,社区制定了一些模块加载方案,最主要的有 CommonJSAMD 两种。前者用于服务器,后者用于浏览器。ES6 在语言标准的层面上,实现了模块功能,而且实现得相当简单,完全可以取代 CommonJS 和 AMD 规范,成为浏览器和服务器通用的模块解决方案。

ES6 模块的设计思想是尽量的静态化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量。CommonJS 和 AMD 模块,都只能在运行时确定这些东西。比如,CommonJS 模块就是对象,输入时必须查找对象属性。

阅读全文 »

Deno 是使用 V8 引擎并用 Rust 语言编写的 JavaScript 和 TypeScript 的简单,现代且安全的运行时。它汇集了许多最佳的开源技术,并在一个小的可执行文件中提供了全面的解决方案。它还解决了 Ryan 在我对Node.js感到遗憾的十件事演讲中谈到的设计缺陷。

前言

不知道大家还记不记得两年前在 Github 发生的「学不动」事件。那次事件的起因便是著名的 Node 之父 Ryan Dahl 宣布新开一个叫 Deno 的项目,于是就有国人以一种类似于贴吧灌水的形式在 Deno 的 issiue 区里用中文大量发“学不动啦”,“求别更新”等帖子,顿时引起一片争论。如今两年时间过去了,ry 也带着他的 Deno 1.0 正式与我们会面。不论我们学的动还是学不动,技术就在那里,不以人的意志为转移。在这篇文章中,我们将会涵盖所有令人激动的 Deno 特性。

阅读全文 »

随着互联网的高速发展,网络迅速普及。人们在享受网络带来便捷的同时,也面临着日益严重的网络安全问题。在一些出名的案例中,上百万的密码、邮件地址和信用卡信息被泄露给了公众,导致网站用户面临个人尴尬和财务威胁。在移动互联网时代,前端人员除了传统的 XSS、CSRF 等安全问题之外,又时常遭遇网络劫持等新型安全问题。当然,浏览器自身也在不断地进化和发展,引入内容安全策略(Content Security Policy)、Same-Site Cookies 等新技术来增强安全性,但是仍存在很多潜在的威胁,这需要前端开发人员不断进行“查漏补缺”。

本文介绍以下几种常见的前端安全问题及其解决方案:

  1. 同源策略
  2. XSS
  3. CSRF
  4. SQL 注入
  5. 点击劫持
  6. window.opener 安全问题
  7. 文件上传漏洞
阅读全文 »