2012-06-29 7 views
2

我看過Javascript:The Good Parts作者Douglas Crockford認爲javascript正則表達式文字共享相同的對象。如果是這樣,那麼這兩個正則表達式文字在lastIndex屬性中有何不同?爲什麼我的Javascript中的兩個正則表達式文字在屬性上有所不同?

var a = /a/g; 
var b = /a/g; 

a.lastIndex = 3; 
document.write(b.lastIndex);​ 

JS Fiddle

0相〜3

+0

這對我來說是新的。你是否還有其他的消息來源呢?或者你可以引用這本書中似乎與這種行爲相矛盾的部分? –

+2

你的答案在這篇文章中描述:http://stackoverflow.com/questions/2645273/javascript-regular-expression-literal-persists-between-function-calls – davidgoli

回答

4

ECMAScript Documentation第7.8.5使得它很清楚它們是兩個不同的對象:

7.8.5正則表達式字面
正則表達式文本是被轉換爲輸入元件RegExp對象(見15.10)每次評估文字。即使兩個文字的內容完全相同,程序中的兩個正則表達式文字也會評估爲正則表達式對象,它們永遠不會相互比較爲===。 RegExp對象也可以在運行時由新的RegExp(見15.10.4)或作爲函數調用RegExp構造函數(15.10.3)創建。

1

因爲它們是不同的對象被輸出。

document.write(a === b); 

即使這樣輸出false

克羅克福德錯了,或者他當時是對的,但時代變了。

我意識到這不是一個特別有用或信息豐富的答案;我只是推回我認爲的東西,因爲你不相信克羅克福德寫的東西可能(現在)是虛假的。

順便說一句,你有沒有提到這一說法?在上下文中閱讀它會很有趣(我沒有這本書)。

+0

檢查鏈接davidgoli發佈。這只是對克羅克福德實際意義上的誤解。 – slebetman

相關問題