《JavaScript 闯关记》之正则表达式

由于本课程的核心是 JavaScript,所以本文着重讲解了「正则表达式」在 JavaScript 中的用法,并未深入「正则表达式」的具体细节。如果您尚不了解「正则表达式」,强烈推荐您先学习 正则表达式30分钟入门教程 http://deerchao.net/tutorials/regex/regex.htm 之后,再进行本课程的学习。

正则表达式(regular expression)是一个描述字符模式的对象,使用正则表达式可以进行强大的模式匹配和文本检索与替换功能。JavaScript 的正则表达式语法是 Perl5 的正则表达式语法的大型子集,所以对于有 Perl 编程经验的程序员来说,学习 JavaScript 中的正则表达式是小菜一碟。

正则表达式的定义

JavaScript 中的正则表达式用 RegExp 对象表示,可以使用 RegExp() 构造函数来创建 RegExp 对象,不过 RegExp 对象更多是通过字面量的语法来创建,使用下面类似 Perl 的语法,就可以创建一个正则表达式。例如:

1
2
3
4
5
// 推荐写法
var expression = / pattern / flags ;
// 不推荐写法
var expression = new RegExp(pattern, flags);

阅读更多

《JavaScript 闯关记》之函数

函数是一段代码,它只定义一次,但可以被执行或调用任意次。在 JavaScript 里,函数即对象,程序可以随意操控它们。比如,可以把函数赋值给变量,或者作为参数传递给其他函数,也可以给它们设置属性,甚至调用它们的方法。如果函数挂载在一个对象上,作为对象的一个属性,就称它为对象的方法。如果函数嵌套在其他函数中定义,这样它们就可以访问它们被定义时所处的作用域中的任何变量。

函数定义

在 JavaScript 中,函数实际上是对象,每个函数都是 Function 构造函数的实例,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定。函数通常有以下3中定义方式。例如:

1
2
3
4
5
6
7
8
9
10
11
12
// 写法一:函数声明(推荐写法)
function sum (num1, num2) {
return num1 + num2;
}
// 写法二:函数表达式(推荐写法)
var sum = function(num1, num2){
return num1 + num2;
};
// 写法三:Function 构造函数(不推荐写法)
var sum = new Function("num1", "num2", "return num1 + num2");

由于函数名仅仅是指向函数的指针,因此函数名与包含对象指针的其他变量没有什么不同。换句话说,一个函数可能会有多个名字。例如:

1
2
3
4
5
6
7
8
9
10
function sum(num1, num2){
return num1 + num2;
}
console.log(sum(10,10)); // 20
var anotherSum = sum;
console.log(anotherSum(10,10)); // 20
sum = null;
console.log(anotherSum(10,10)); // 20

阅读更多

《JavaScript 闯关记》之对象

数组是值的有序集合。每个值叫做一个元素,而每个元素在数组中有一个位置,以数字表示,称为索引。

JavaScript 数组是无类型的,数组元素可以是任意类型,并且同一个数组中的不同元素也可能有不同的类型。数组的元素甚至也可能是对象或其他数组。

JavaScript数组是动态的,根据需要它们会增长或缩减,并且在创建数组时无须声明一个固定的大小或者在数组大小变化时无须重新分配空间。

JavaScript 数组可能是稀疏的,数组元素的索引不一定要连续的,它们之间可以有空缺。每个JavaScript数组都有一个length属性。针对非稀疏数组,该属性就是数组元素的个数。针对稀疏数组,length比所有元素的索引要大。

JavaScript 数组是 JavaScript 对象的特殊形式,数组索引实际上和碰巧是整数的属性名差不多。通常,数组的实现是经过优化的,用数字索引来访问数组元素一般来说比访问常规的对象属性要快很多。

阅读更多

被「李笑来老师」拉黑之「JavaScript微博自动转发的脚本」

故事的背景如下图,李笑来 老师于10月19日在 知乎Live 开设 一小时建立终生受用的阅读操作系统 的讲座,他老人家看到大家伙报名踊跃,便在微博上发起了一个 猜数量赢取iPhone7 的活动。

因为该活动注明了「不限猜的次数」,我便用 JavaScript 写一个自动转发的脚本,用机器代替手工转发,结果转发不到200次就被 李笑来 老师拉黑了,实在扫兴。与其独自郁闷,不如把技术细节分享给大家,祝大家能早日赢得 iPhone7。我的微博地址是:http://weibo.com/stone0090,欢迎大家来围观。

阅读更多

「前端开发者」如何把握住「微信小程序」这波红利?

由于前两周一直在老家处理重要事情,虽然朋友圈被「微信小程序」刷爆了,但并没有时间深入了解。

昨天回广州之后,第一件事情就是把「微信小程序」相关的文章、开发文档、设计规范全部看了一遍,基本上明白了「微信小程序」是怎么回事,我关注的公众号都很看好「微信小程序」的前景。

作为一个「前端开发者」,确实觉得「微信小程序」是个不错的机会,但从哪个方向投入到这股的热潮中呢?咨询了好几位公众号的作者,得到了以下回复:

  • 开发新的轮子。
  • 赶快投入,开始做一些应用,
  • 大家都去挖金子,你可以去边上卖水。
  • 关注排名100开外的App,估计这些突破口比较大。

阅读更多