Có một .toString()
trên Symbol
trong ES6 trả về biểu diễn chuỗi Symbol
, nhưng tự hỏi tại sao '' + Symbol()
không hoạt động (chạy biểu thức này ném ra TypeError
mà tôi không mong đợi)? Sau đó, chỉ cần gọi số .toString()
trên số Symbol
mới và nối thêm (+
) vào chuỗi trống không?Chuyển đổi biểu tượng JavaScript thành chuỗi?
Trả lời
là sau này chỉ gọi
.toString()
trên mớiSymbol
và nối thêm (+
) nó để chuỗi rỗng?
Không thực sự, Biểu tượng không thể được ngầm đúc thành chuỗi hoặc số, mặc dù đủ thú vị bạn hoàn toàn có thể truyền chúng thành boolean.
MDN actually has a section trên một số những cạm bẫy:
Symbol loại chuyển đổi
Một số điều cần lưu ý khi làm việc với loại chuyển đổi các biểu tượng.
- Khi cố gắng để chuyển đổi một biểu tượng cho một số, một
TypeError
sẽ được ném (ví dụ+sym
hoặcsym | 0
).- Khi sử dụng bình đẳng lỏng lẻo,
Object(sym) == sym
lợi nhuậntrue.
Symbol("foo") + "bar"
ném mộtTypeError
(không thể chuyển đổi biểu tượng để string). Điều này ngăn cản bạn âm thầm tạo một tên thuộc tính chuỗi mới từ một biểu tượng, ví dụ.- Chuyển đổi "an toàn hơn"
String(sym)
hoạt động giống như cuộc gọi đếnSymbol.prototype.toString()
có ký hiệu, nhưng lưu ý rằngnew String(sym)
sẽ bị ném.
Hành vi này được ghi chép lại trong spec dưới abstract ToString
operation:
Đối số Loại: Symbol
Kết quả: Ném một ngoại lệ
TypeError
.
Và tương tự cho abstract ToNumber
operation:
Đối số Loại: Symbol
Kết quả: Ném một ngoại lệ
TypeError
.
Để đúc một Symbol
thành một chuỗi mà không có một TypeError
, bạn phải sử dụng một trong hai phương pháp toString
, hoặc String()
.
Có ngầm đưa một đối tượng vào chuỗi có nghĩa là gọi 'Object.prototype.toString()' trên đối tượng không? – Thomson
@Thomson Có, ngầm đúc một đối tượng vào một chuỗi sẽ gọi phương thức 'toString', hoặc trên bản thân cá thể nếu một được đặt, hoặc từ nguyên mẫu. –
như bình luận của bạn, ngầm đúc 'Symbol' thành' String' sẽ thành công vì có một 'toString()' có thể thực hiện được trên cá thể 'Symbol' (' Symbol() ')? – Thomson
Từ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toString.
Đối tượng biểu tượng ghi đè phương thức toString của đối tượng đối tượng; nó không kế thừa Object.prototype.toString(). Đối tượng Symbol, phương thức toString trả về một biểu diễn chuỗi của đối tượng.
Điều này không trả lời câu hỏi, đó là lý do tại sao ''' + symbol' không hoạt động. –
- 1. Javascript/chuyển đổi chuỗi kiểu CSS thành đối tượng JS
- 2. chuyển đổi chuỗi javascript thành đối tượng html
- 3. Cách chuyển đổi chuỗi thành đối tượng json trong javascript
- 4. Javascript để chuyển đổi chuỗi thành số?
- 5. Chuyển đổi bitmap thành biểu tượng
- 6. Powershell: Chuyển đổi đối tượng thành chuỗi
- 7. Chuyển đổi chuỗi thành đối tượng datetime.time
- 8. Chuyển đổi đối tượng SRE_Match thành chuỗi
- 9. Chuyển đổi chuỗi thành đối tượng JSON
- 10. Chuyển đổi SVGSVGElement thành Chuỗi
- 11. Chuyển đổi đối tượng XMLDocument thành String trong Javascript
- 12. Chuyển đổi chuỗi unicode thành chuỗi byte
- 13. chuyển đổi một chuỗi để javascript đối tượng
- 14. Chuyển đổi chuỗi thành Carbon
- 15. Chuyển đổi biểu thức chuỗi thành logic boolean - C#
- 16. Chuyển đổi biểu diễn chuỗi các bit thành một byte
- 17. Chuyển đổi địa chỉ MAC nguyên thành chuỗi trong Javascript
- 18. Chuyển đổi dữ liệu biểu mẫu thành đối tượng JSON
- 19. Javascript chuyển đổi giây thành đối tượng ngày
- 20. Java: Cách chuyển đổi bất kỳ đối tượng nào thành biểu diễn chuỗi dữ liệu
- 21. Tại sao khóa chuỗi này trong một băm được chuyển đổi thành một biểu tượng?
- 22. của Ruby công án: Tại sao chuyển đổi danh sách các biểu tượng thành các chuỗi
- 23. ActiveRecord chuyển đổi phím biểu tượng thành các chuỗi khi tuần tự băm của tôi
- 24. Javascript các Definitive Guide: sự nhầm lẫn của bước chuyển đổi đối tượng thành một chuỗi
- 25. Chuỗi chuyển đổi JQuery thành đối tượng Nút
- 26. chuyển đổi chuỗi json thành đối tượng python
- 27. Đối tượng không thể được chuyển đổi thành chuỗi?
- 28. Chuyển đổi một đối tượng thành chuỗi XML
- 29. scrapy: chuyển đổi chuỗi html thành đối tượng HtmlResponse
- 30. Chuyển đổi chuỗi Json thành Danh sách các đối tượng
@Dai ''' + 123' hoạt động như chuyển đổi loại ẩn, nhưng tại sao' '' + Ký hiệu() 'không hoạt động ngay cả được coi là chuyển đổi ngầm? – Thomson
Xin lỗi, tôi đã đọc sai câu hỏi của bạn. Bạn đang thực sự thấy hành vi nào? Bạn có nhận được 'TypeError' hay cái gì khác không? – Dai
@Dai, xin lỗi vì câu hỏi gây nhầm lẫn. Đã sửa đổi một chút. Tôi thấy ''' + Symbol()' ném TypeError, và tự hỏi tại sao nó làm điều này bởi vì 'Symbol(). ToString()' hoạt động. – Thomson