2013-01-21 52 views
8
var @foo = 'bar'; 
// SyntaxError: missing variable name. 

{ '@foo' : 'bar' }; 
// SyntaxError: invalid label. 

var obj = { '@foo' : 'bar' }; 
[email protected]; 
// TypeError: can't convert AttributeName to string 

var obj = { '@foo' : 'bar' }; 
obj['@foo']; 
// "bar" 

Bất cứ ai có thể giải thích cho tôi tại sao biểu tượng '@' không được phép sử dụng trong các tên biến và những gì tôi nên sử dụng?Tại sao biểu tượng '@' được đặt trong javascript và mục đích của nó là gì?

+0

nó được sử dụng trong e4x một số loại cú pháp đặc biệt để đi qua xml – philipp

+0

Cũng như bạn không thể sử dụng '#', ''' hoặc '" '. Cú pháp không hợp lệ cho các tên biến là – VisioN

+0

Một câu hỏi về tên thuộc tính đối tượng JavaScript] (http://stackoverflow.com/questions/5006049/a-question-about-javascript-object-property-name) – jbabey

Trả lời

7

Nó không được đặt trước hoặc đặc biệt, nó không phải là ký tự nhận dạng javascript hợp lệ. Đối với lý do tương tự làm việc này:

var obj = { 'foo-baz' : 'bar' }; 
obj['foo-baz']; 

Và đây không:

var obj = { 'foo-baz' : 'bar' }; 
obj.foo-baz; 

định danh javascript trị phải bắt đầu bằng chữ cái hoặc $, và chỉ có thể chứa chữ cái, số, $, và _. Bất kỳ điều gì khác trong tên thuộc tính sẽ buộc bạn phải sử dụng ký hiệu ngoặc vuông.

Related question.

+0

Được rồi, điều đó có ý nghĩa. Tuy nhiên, tôi biết rằng '- 'trừ' biểu tượng '' 'làm gì? – idbehold

+1

@idbehold nó không liên quan gì đến biểu tượng (' @ 'không có ý nghĩa đặc biệt trong javascript, nếu bạn tò mò) - theo [spec] (http : //ecma262-5.com/ELS5_HTML.htm#Section_11.1.5), khóa đối tượng phải là chuỗi ký tự, chữ số hoặc tên số nhận dạng. Vì '@', '-', v.v. không được cho phép trong các tên nhận dạng , chúng phải được bao bọc trong dấu ngoặc kép để trở thành chuỗi ngắn rals. – jbabey

+0

Cảm ơn, thưa bạn. Lời giải thích hoàn hảo. – idbehold

Các vấn đề liên quan