1 Câu hỏi: Tại sao công cụ JavaScript V8 của Chrome nhận ra phần mềm TG TG-1 thông qua phiên bản TG TG-12, là ngày / lần hợp lệ?

câu hỏi được tạo ra tại Wed, May 8, 2019 12:00 AM

Tôi đã triển khai trình phân tích cú pháp CSV đoán định dạng loại cho từng cột nhưng tôi thấy rằng lớp Ngày JavaScript tin rằng "TG-1" là ngày /giờ hợp lệ.

Đây có phải là định dạng ngày tối nghĩa mà tôi chưa từng thấy trước đây mà Chrome hỗ trợ không? Tôi sẽ không nghĩ rằng đây là một ngày hợp lệ và nhìn vào các ngày khác nhau, các tiêu chuẩn ISO tôi chưa thấy một tài liệu tham khảo nào về điều này.

Chrome 74 nói rằng nó hợp lệ.

Firefox 64 nói rằng nó không hợp lệ.

let validDate = true;
try{
   d = new Date("TG-1");
   d.toISOString()
}catch(e){
   validDate = false
}
console.log(validDate);

Bất kỳ chuỗi nào theo sau - và số 1-12 được coi là hợp lệ:

d = new Date("adsfadgag-12")//valid per V8
    
5
  1. Không có ngoại lệ nào được đưa ra khi bạn cố gắng thực hiện một ngày với một chuỗi vô nghĩa. Bạn chỉ nhận được một đối tượng Ngày không hoạt động.
    2019-05-08 16: 06: 55Z
  2. .
    2019-05-08 16: 07: 00Z
  3. Xem những gì TG cho bạn thấy.
    2019-05-08 16: 07: 33Z
  4. @ Nicolas có thể là bất kỳ chuỗi tùy ý nào theo sau - d = Ngày mới ("adsfadgag-12") là hợp lệ
    2019-05-08 16: 11: 51Z
  5. @ Keith 1 //cũng hợp lệ trên mỗi V8
    2019-05-08 16: 24: 33Z
1 Câu trả lời                              1                         

Để trích dẫn từ V8 sourcecode :

  

Ngày kế thừa:

     

Bất kỳ từ nào không được nhận dạng trước khi số đầu tiên bị bỏ qua.

     

Văn bản ngoặc đơn bị bỏ qua.

     

Một số không dấu theo sau ':' là giá trị thời gian và được thêm vào TimeComposer. Một số theo sau là '::' cũng thêm số 0 thứ hai. Một số theo sau là '.' cũng là thời gian và phải được theo sau bởi mili giây.

     

Bất kỳ số nào khác là thành phần ngày và được thêm vào DayComposer. Tên tháng (hoặc thực sự: bất kỳ từ nào có ba chữ cái đầu tiên giống như tên tháng) được ghi lại dưới dạng tháng được đặt tên trong trình soạn thảo Ngày. Một từ có thể nhận ra là múi giờ được ghi lại như vậy, như là Jan.

     

Ngày kế thừa không cho phép thêm dấu hiệu ('+' hoặc '-') hoặc bị khóa ')' sau khi số đã được đọc (trước số đầu tiên, mọi rác đều được cho phép).

     

Giao lộ của hai: Chuỗi phù hợp với cả hai định dạng (ví dụ: 1970-01-01) sẽ được phân tích cú pháp dưới dạng chuỗi thời gian ngày ES5 - có nghĩa là chuỗi sẽ mặc định theo múi giờ UTC. Điều đó là không thể tránh khỏi nếu tuân theo đặc tả ES5.

     

Sau khi đã đọc "T" hợp lệ trong khi quét chuỗi thời gian ES5, đầu vào không còn là ngày kế thừa hợp lệ, vì "T" là chuỗi rác sau khi đã đọc số.

Nói cách khác: Hành vi này không thực sự được lên kế hoạch, chỉ là một số trình duyệt hoạt động như thế này và do đó, hành vi kỳ lạ này phải được giữ lại. 2001 sẽ cố gắng phân tích gần như mọi thứ mà không phàn nàn.

    
1
2019-05-08 16: 32: 05Z
console.log(d)
nguồn đặt đây