File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -482,7 +482,7 @@ JavaScript中的正则表达式也是对象,可以通过两种方式创建它
482482
483483有一种不得不使用new RegExp()的情形,有时正则表达式是不确定的,直到运行时才能确定下来。
484484
485- 正则表达式直接量和Regexp()构造函数的另一个区别是,正则表达式直接量只在解析时创建一次正则表达式对象(译注:多次解析同一个正则表达式,会产生相同的实例对象)。如果在循环体内反复创建相同的正则表达式,则每个正则对象的所有属性(比如lastIndex)只会设置一次(译注:由于每次创建相同的实例对象,每个循环中的实例对象都是同一个,属性也自然相同),下面这个例子展示了两次都返回了相同的正则表达式的情形(译注:这里作者的表述不完全正确,不同的JavaScript引擎对此实现不一致。下面这段代码在SpiderMonkey中运行结果和作者描述的一致,在V8和TraceMonkey中的运行结果和作者描述的不一致,在V8和Tracemonkey中多次解析相同的正则表达式直接量都会创建新的实例,而不是同一个实例,这是需要特别注意的,不过根据ES5的发展方向看,V8和Tracemonkey的做法更可取,读者感兴趣的话可以将这段示例代码在Firefox3.6和Firefox4.0中分别运行一下,运行结果截然相反 )。
485+ 正则表达式直接量和Regexp()构造函数的另一个区别是,正则表达式直接量只在解析时创建一次正则表达式对象(译注:多次解析同一个正则表达式,会产生相同的实例对象)。如果在循环体内反复创建相同的正则表达式,则每个正则对象的所有属性(比如lastIndex)只会设置一次(译注:由于每次创建相同的实例对象,每个循环中的实例对象都是同一个,属性也自然相同),下面这个例子展示了两次都返回了相同的正则表达式的情形(译注:这里作者的表述只是针对ES3规范而言,下面这段代码在NodeJS、IE6-IE9、FireFox4、Chrome10、Safari5中运行结果和作者描述的不一致,Firefox 3.6中的运行结果和作者描述是一致的,原因可以在ECMAScript5规范第24页和第247页找到,也就是说在ECMAScript3规范中,用正则表达式创建的RegExp对象会共享同一个实例,而在ECMAScript5中则是两个独立的实例。而最新的Firefox4、Chrome和Safari5都遵循ECMAScript5标准,至于IE6-IE8都没有很好的遵循ECMAScript3标准,不过在这个问题上反而处理对了。很明显ECMAScript5的规范更符合开发者的期望 )。
486486
487487 function getRE() {
488488 var re = /[a-z]/;
You can’t perform that action at this time.
0 commit comments