Kiểu symbol
Kiểu symbol trong JavaScript là một loại primitive type, giá trị của nó là duy nhất. Kiểu boolean hay kiểu number nếu giá trị giống nhau thì so sánh bằng sẽ là true. Ngược lại, symbol ngay cả khi tên giống nhau nhưng nơi khởi tạo khác nhau thì sẽ là false.
jsconsts1 =Symbol ("foo");consts2 =Symbol ("foo");console .log (s1 ===s1 );console .log (s1 ===s2 );
jsconsts1 =Symbol ("foo");consts2 =Symbol ("foo");console .log (s1 ===s1 );console .log (s1 ===s2 );
Ruby cũng có type tên là symbol. Symbol của Ruby nếu giá trị giống nhau thì so sánh bằng sẽ là true dù viết ở vị trí khác nhau.
ruby# Ruby codes1 = :foos2 = :foop s1 == s2 #=> true
ruby# Ruby codes1 = :foos2 = :foop s1 == s2 #=> true
Ngược lại, JavaScript như đã nói ở trên, được quyết định bởi nơi khởi tạo symbol, nên những người từ Ruby chuyển sang cần chú ý. Điều tương tự symbol của Ruby, trong JavaScript hay TypeScript được giải quyết bằng chuỗi.
Type annotation của symbol
Type annotation của symbol trong TypeScript dùng symbol.
tsconsts : symbol =Symbol ();
tsconsts : symbol =Symbol ();
Lưu ý khi dùng kiểu symbol
Truyền kiểu symbol trực tiếp vào JSON.stringify() sẽ trả về undefined.
tsconsole .log (JSON .stringify (Symbol ("many")));
tsconsole .log (JSON .stringify (Symbol ("many")));
Ngoài ra, truyền object chứa kiểu symbol trong property vào JSON.stringify(), key chứa kiểu symbol trong property sẽ biến mất.
tsconsole .log (JSON .stringify ({x :Symbol ("many"),y : "hello",}));
tsconsole .log (JSON .stringify ({x :Symbol ("many"),y : "hello",}));
Tương tự, truyền object chứa kiểu symbol làm key vào JSON.stringify(), key là kiểu symbol sẽ biến mất.
tsconsole .log (JSON .stringify ({[Symbol ("many")]: "hello",y : "hello",}));
tsconsole .log (JSON .stringify ({[Symbol ("many")]: "hello",y : "hello",}));
Mục đích của symbol
Động cơ đưa symbol vào JavaScript là để thêm API mới mà không phá vỡ backward compatibility của built-in API của JavaScript. Tóm lại, được đưa vào để dễ dàng update bản thân JavaScript. Do đó, giới hạn trong trường hợp phát triển application, cơ hội viết code sử dụng nhiều symbol không nhiều lắm.