2009-07-06 34 views
13

Tại sao RegExp /^\w+$/ khớp với undefined?

Ví dụ mã:

alert(/^\w+$/.test(undefined)); 

này sẽ hiển thị đúng trong Firefox 3 (chỉ trình duyệt Tôi đã thử nghiệm nó trên).

Trả lời

33

Khi undefined được truyền tới một chuỗi (mà regex thực hiện), nó tạo chuỗi "undefined", sau đó được đối sánh.

+2

Làm cho tinh thần, mặc dù nó hơi khó hiểu một chút. – cdmckay

+0

Có lẽ một chút ... nhưng không có khái niệm thực sự về ngoại lệ hoặc bất cứ điều gì như thế trong JavaScript, một hành vi kỳ quặc nhỏ hơn là chết lặng lẽ. –

+0

Cũng có lỗi (https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Error) ... – cdmckay

4
/(\w)(\w)(\w)(\w)(\w)/.exec(undefined); 

lợi nhuận: ["undef", "u", "n", "d", "e", "f"]

Nó được điều trị không xác định như chuỗi "undefined".

4

Xem phần Đặc điểm kỹ thuật ECMAScript 15.10.6.2 cho RegExp.prototype.exec (chuỗi) sẽ được gọi từ phương thức .match. phù hợp về cơ bản là exec khi nó được đánh giá là true.

Đây là từ phù hợp với thông số: Thực hiện đối sánh cụm từ thông dụng với biểu thức chính quy và trả về đối tượng mảng có chứa kết quả khớp hoặc null nếu chuỗi không khớp Chuỗi ToString (chuỗi) được tìm kiếm cho sự xuất hiện của mẫu biểu thức chính quy như sau:

  1. Cho S là giá trị của ToString (chuỗi).
  2. Hãy để độ dài là S.
  3. Hãy để cho LastIndex là giá trị của thuộc tính lastIndex.
  4. Để tôi là giá trị của ToInteger (lastIndex).
  5. Nếu thuộc tính chung là sai, hãy để i = 0.
  6. Nếu tôi < 0 hoặc I> độ dài thì đặt lastIndex thành 0 và trả về giá trị rỗng.
  7. Gọi [[Match]], cho nó đối số S và i. Nếu [[Match]] trả về lỗi, chuyển sang bước 8; nếu không, hãy để r là kết quả Nhà nước và đi đến bước 10.
  8. Hãy để i = i + 1.
  9. Chuyển đến bước 6.
  10. Hãy để giá trị endIndex của e be r.

Như bạn có thể thấy nó sẽ dịch bất kỳ đầu vào nào thành chuỗi, do đó không xác định trở thành 'không xác định' và sẽ khớp với đúng.

Kiểm tra điều này cũng như bên ngoài trình duyệt bằng cách sử dụng JScript trong dòng lệnh và nhận được kết quả tương tự.

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