2010-11-28 104 views
10

在基於V8的JS引擎中,您可以在屬性鍵中使用未加引號的關鍵字,如({ delete: 1 }),而在Rhino或其他JS引擎中,它會引發錯誤,這怎麼可能?什麼應該是正確的行爲?哈希鍵中的JavaScript關鍵字

[email protected]:~$ rhino 
Rhino 1.7 release 2 2010 01 20 
js> ({ delete: 1 })   
js: "<stdin>", line 2: invalid property id 
js: ({ delete: 1 }) 
js: .........^ 
js> 
[email protected]:~$ node 
> ({ delete: 1}) 
{ delete: 1 } 

回答

15

新的ECMAScript 5 specification允許屬性名稱爲保留字。一些引擎可能採用了這種新的「功能」,而其他引擎可能仍然需要在引用保留字時引用屬性名稱。

+1

我找到了差異:http://www.google.com/codesearch /p?hl=en#W9JxUuHYyMg/trunk/src/parser.cc&q=parser%20package:http://v8%5C.googlecode%5C.com&l=3914和http://mxr.mozilla.org/js/source /js/rhino/src/org/mozilla/javascript/Parser.java#3083 V8顯式接受的關鍵字標記 – 2010-11-28 20:59:09

2

爲了清楚,你可能想避免deletenew或者其他經營者財產的名稱,甚至在新的規格是放鬆一下