2013-07-11 29 views
5

Tôi vừa phát hiện thấy một lỗi trong plugin wordpress của bên thứ 3 có vẻ như đã được gây ra bởi trình chỉnh sửa mã javascript.Tại sao javascript tạo ra các lỗi khác nhau cho chuỗi và chữ với ++?

Mã gốc, tôi tin rằng, đáng lẽ phải là thế này:

this.id = "ui-id-" + ++n; 

Thay vào đó nó đã được rút gọn vào:

this.id="ui-id-"+++n; 

Điều này dẫn đến các lỗi sau trong Chrome:

Uncaught ReferenceError: Invalid left-hand side expression in postfix operation 

Và lỗi tương tự trong Firefox. Khó chịu, trong các plugin của Chrome, các chức năng Javascript của tôi vẫn được tạo thành công nhưng trong Firefox lỗi này khiến các chức năng của tôi không được tạo và plugin của tôi bị lỗi.

var n = 1; 
var foo = 10; 
var bar = "ID-"; 
console.log(foo+++n); // results in 11 
console.log(foo); // also results in 11 
console.log(bar+++n); // results in NaN soft error/warning 
console.log ("ID-"+ ++n); // results in ID-2 
console.log ("ID-"+++n); // hard error 

Tôi không thực sự chắc chắn những gì câu hỏi để hỏi ở đây -

  1. Tại sao +++ luôn được hiểu là ++ +?
  2. Bộ lọc nào gây ra lỗi này?
  3. Tại sao firefox xử lý lỗi này nghiêm trọng hơn Chrome và khiến các hàm javascript của riêng tôi trong Wordpress không thể được tạo?
  4. Tại sao thanh ++ bị lỗi mềm (NaN) nhưng "ID -" ++ bị lỗi nặng?

Trả lời

1

Tôi thấy câu hỏi 4. điều thú vị duy nhất, vì vậy tôi chỉ trả lời câu hỏi đó (1. là tầm thường: "theo định nghĩa của ngôn ngữ", 2. Tôi không biết, 3. Tôi làm không hiểu):

Câu trả lời nằm trong các lỗi bạn trích dẫn:

của router Reference lỗi: không hợp lệ bên trái biểu hiện bên đi vào hoạt động postfix

++ được sửa đổi hoạt động, nó n eeds "biểu hiện bên trái". bar là biến, vì vậy nó là LHS, "ID-" là một chữ, vì vậy nó không phải là một LHS.

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