1. Null是个对象
2. NaN是个数值
3. 无关键字的数组等同于false
4. replace()可以接受回调函数
这是JavaScript最鲜为人知的秘密之一,v1.3中首次引入。大部分情况下,replace()
的使用荧光类似下面:
alert('10 13 21 48 52'.replace(/\d+/g, '*')); //用 * 替换所有的数字
这是一个简单的替换,一个字符串,一个星号。但是,如果我们希望在替换发生的时候有更多的控制,该怎么办呢?我们只希望替换30以下的数值,该怎么办呢?此时如果仅仅依靠正则表达式是鞭长莫及的。我们需要借助回调函数的东风对每个匹配进行处理。
alert('10 13 21 48 52'.replace(/\d+/g, function(match) { return parseInt(match) < 30 ? '*' : match; }));
当每个匹配完成的时候,JavaScript应用回调函数,传递匹配内容给match
参数。然后,根据回调函数里面的过滤规则,要么返回星号,要么返回匹配本身(无替换发生)。
5. 正则表达式:不只是match和replace
不少javascript工程师都是只通过match
和replace
和正则表达式打交道。但JavaScript所定义的正则表达式相关方法远不止这两个。
其中值得一提的是test()
,其工作方式类似match()
,但是返回值却不一样:test()
返回的是布尔型,用来验证是否匹配,执行速度高于match()
。
alert(/\w{3,}/.test('Hello')); //弹出 'true'
上面行代码用来验证字符串是否有三个以上普通字符,显然"hello"是符合要求的,所以弹出true
。
我们还应注意RegExp
对象,你可以用此创建动态正则表达式对象,例如:
function findWord(word, string) { var instancesOfWord = string.match(new RegExp('\\b'+word+'\\b', 'ig')); alert(instancesOfWord); } findWord('car', 'Carl went to buy a car but had forgotten his credit card.');
这儿,我们基于参数word
动态创建了匹配验证。这段测试代码作用是不区分大小选的情况下选择car
这个单词。眼睛一扫而过,测试英文句子中只有一个单词是car
,因此这里的演出仅一个单词。\b
是用来表示单词边界的。
6. 可以冒充作用域
call(),apply()