Cách tốt nhất để tìm hiểu xem biến có phải là một chuỗi hay không (và, tương tự như vậy, một số, một boolean, vv)?Kiểm tra loại biến
Thông thường, bạn sẽ tìm thấy:
function isString(value) {
return typeof value === 'string';
}
Nhưng mọi người quên rằng người ta cũng có thể tạo ra chuỗi các đối tượng trực tiếp sử dụng var foo = new String("bar");
- cho dù đó là một ý tưởng tốt hay không là một vấn đề hoàn toàn khác nhau.
Vì vậy, con đường để đi đến đây là gì? Tôi có thể nghĩ đến - và đã thấy - cách tiếp cận khác nhau (hơi đơn giản):
// option 1
function isString(value) {
return (typeof value === 'string') ||
/^function String\(\)/.test(value.constructor + '');
}
hoặc
// option 2
function isString(value) {
return (typeof value === 'string') ||
(value.constructor === String);
}
hoặc
// option 3
function isString(value) {
return (typeof value === 'string') ||
value instanceof String;
}
Có một "tốt nhất" con đường để đi về vấn đề này ? Hay tất cả chúng đều tương đương nhau?
Gọn gàng, tôi không biết điều đó (ít nhất là tôi chưa bao giờ nghĩ về nó;) Tuy nhiên, không thực sự trả lời câu hỏi. – n3rd
@ n3rd: Làm cách nào để nó không trả lời câu hỏi khác ngoài câu hỏi không phải là một trong ba tùy chọn hiện tại? – BoltClock
+1. Vừa mới đăng bài này. Liệu điều này bắt (gasp) subclasses của String mặc dù? – Skurmedel