《JavaScript 闯关记》之简介

JavaScript 是面向 Web 的编程语言,绝大多数现代网站都使用了 JavaScript,并且所有的现代 Web 浏览器(电脑,手机,平板)均包含了 JavaScript 解释器。 这使得 JavaScript 能够称得上史上使用最广泛的编程语言。 JavaScript 也是前端开发工程师必须掌握的三种技能之一:描述网页内容的 HTML、描述网页样式的 CSS、以及描述网页行为的 JavaScript。

JavaScript 是一门 动态的、弱类型的、面向对象的、解释型的 编程语言,非常适合面向对象和函数式的编程风格。JavaScript 的语法来自于 Java,它的一等函数(first-class function)来自于 Scheme,它的基于原型(prototype-based)的继承来自于 Self。但学习本课程不必去了解那些(Java/Scheme/Slef)语言或熟悉那些术语。

JavaScript 起源

时间:1995年

人物:Brendan Eich(布兰登·艾奇)

背景:那个时候,绝大多数因特网用户都是用速度仅为28.8kbit/s的「猫」上网,为了完成简单的表单验证,必须把表单数据发送到服务器端才能确定用户是否没有填写某个必填域、是否输入了无效的值,每次操作需等待30秒以上才会有结果,这无疑是在慢性自杀。

事件:当时走在技术革新最前沿的 Netscape 公司指派 Brendan Eich 开发一种客户端语言,用来处理这种简单的验证,它就是 JavaScript。JavaScript 原名 LiveScript,Netscape 为了搭上媒体热炒 Java 的顺风车,才把 LiveScript 改名为 JavaScript。(所以 Java 和 JavaScript 的关系,就相当于雷锋和雷峰塔的关系。)

自此以后,JavaScript 逐渐成为市面上常见浏览器必备的一项特色功能。如今,JavaScript 的用途早已不再局限于简单的数据验证,而是具备了与浏览器窗口及其内容等几乎所有方面交互的能力。今天的 JavaScript 已经成为一门功能全面的编程语言,能够处理复杂的计算和交互,拥有了闭包、匿名(lambda,拉姆达)函数,甚至元编程等特性。

JavaScript 从一个简单的输入验证器发展成为一门强大的編程语言,完全出乎人们的意料。应该说,它既是一门非常简单的语言,又是一门非常复杂的语言。说它简单,是因为学会使用它只需片刻功夫;而说它复杂,是因为要真正掌握它则需要数年时间。

阅读更多

《JavaScript 闯关记》

为何写作此课程

stone 主要负责基于 Web 的企业内部管理系统的开发,虽然能够熟练地使用 JavaScript,但随着对 JavaScript 的理解越来越深,才发现自己尚未掌握其精髓。

阅读更多

JavaScript检测之basevalidate.js

上篇文章「JavaScript检测原始值、引用值、属性」中涉及了大量有用的代码范例,为了让大家更方便的使用这些代码,博主特意把这些代码重新整理并托管到 GitHub,项目地址是:https://github.com/stone0090/s-fontend/tree/master/me/basevalidate

basevalidate.js 包含 14个独立检测方法1个综合检测方法,示例代码如下:

阅读更多

如何排版 微信公众号「代码块」

最近博主刚开通微信公众号「石佳劼的博客」,被微信公众平台的图文编辑器折腾的不轻,如果文章中包含「代码块」,怎么排版都显得杂乱无章。之前一直用 Markdown 写作,从来没有考虑过排版、样式问题,因为绝大多数 Markdown 编辑器都能生成简洁、优雅的预览效果。

试过用 Markdown 在 GitHub为知笔记有道云笔记石佳劼的博客i 排版 生成带样式的文本,拷贝到微信公众号之后,「代码块」的样式几乎完全丢失,实在是惨不忍睹。

阅读更多

JavaScript检测原始值、引用值、属性

上周写过一篇读书笔记《编写可维护的JavaScript》之编程实践,其中 第8章 避免『空比较』是博主在工作中遇坑较多的雷区,所以特此把该章节重新整理分享,希望大家不再坑队友(>﹏<)。

在 JavaScript 中,我们常常会看到这样的代码:变量与null的比较(这种用法很有问题),用来判断变量是否被赋予了一个合理的值。比如:

1
2
3
4
5
6
7
8
9
10
var Controller = {
process: function(items) {
if (items !== null) { // 不好的写法
items.sort();
items.forEach(function(item) {
// 执行一些逻辑
});
}
}
}

在这段代码中,process()方法显然希望items是一个数组,因为我们看到items拥有sort()forEach()。这段代码的意图非常明显:如果参数items不是一个组数,则停止接下来的操作。这种写法的问题在于,和null的比较并不能真正避免错误的发生。items的值可以是1,也可以是是字符串,甚至可以是任意对象。这些值都和null不相等,进而会导致process()方法一旦执行到sort()时就会出错。

仅仅和null比较并不能提供足够的信息来判断后续代码的执行是否真的安全。好在 JavaScript 为我们提供了很多种方法来检测变量的真实值。

阅读更多