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).
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).
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.
/(\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"
.
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:
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ự.
Làm cho tinh thần, mặc dù nó hơi khó hiểu một chút. – cdmckay
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ẽ. –
Cũng có lỗi (https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Error) ... – cdmckay