Một thay thế cho rất nhiều typeof
câu trả lời;
Biến toàn cục được khai báo với một var varname = value;
tuyên bố trong phạm vi toàn cầu
có thể được truy cập như các thuộc tính của đối tượng cửa sổ.
Như vậy, hasOwnProperty()
phương pháp, mà
trả về một boolean cho biết liệu đối tượng có thuộc tính được chỉ định làm thuộc tính riêng của nó hay không (trái ngược với việc kế thừa nó)
có thể được sử dụng để xác định xem
a var
của "varname" đã được khai báo trên toàn cầu tức là một thuộc tính của window
.
// Globally established, therefore, properties of window
var foo = "whatever", // string
bar = false, // bool
baz; // undefined
// window.qux does not exist
console.log( [
window.hasOwnProperty( "foo" ), // true
window.hasOwnProperty( "bar" ), // true
window.hasOwnProperty( "baz" ), // true
window.hasOwnProperty( "qux" ) // false
] );
Điều tuyệt vời hasOwnProperty()
là khi gọi nó, chúng ta không sử dụng một biến có thể chưa được khai báo - điều này tất nhiên là một nửa vấn đề ở nơi đầu tiên.
Mặc dù không phải lúc nào cũng là giải pháp hoàn hảo hay lý tưởng , nhưng trong một số trường hợp nhất định, đó chỉ là công việc!
Ghi chú
Điều trên là đúng khi sử dụng var
để xác định một biến , trái ngược với let
:
khai báo một biến cục bộ phạm vi khối, tùy ý khởi tạo nó thành một giá trị.
không giống như var
từ khóa, định nghĩa một biến trên toàn cầu hoặc cục bộ cho toàn bộ hàm bất kể phạm vi khối.
Ở cấp cao nhất của chương trình và chức năng let
, không giống như var
, không tạo ra một thuộc tính trên đối tượng toàn cầu.
Để đầy đủ: các const
hằng số, theo định nghĩa, không thực sự biến (mặc dù nội dung của chúng có thể); phù hợp hơn:
Các hằng số toàn cầu không trở thành thuộc tính của đối tượng cửa sổ, không giống như var
các biến. Một bộ khởi tạo cho một hằng số là bắt buộc; nghĩa là, bạn phải chỉ định giá trị của nó trong cùng một câu lệnh được khai báo.
Giá trị của hằng số không thể thay đổi thông qua việc gán lại và nó không thể được xác định lại.
Khai báo const tạo một tham chiếu chỉ đọc đến một giá trị. Điều đó không có nghĩa là giá trị mà nó giữ là bất biến, chỉ là định danh biến không thể được gán lại.
Vì let
các biến hoặc const
hằng không bao giờ là thuộc tính của bất kỳ đối tượng nào đã kế thừa hasOwnProperty()
phương thức, nên nó không thể được sử dụng để kiểm tra sự tồn tại của chúng.
Về tính khả dụng và sử dụng của hasOwnProperty()
:
Mọi đối tượng xuất phát từ Object đều kế thừa hasOwnProperty()
phương thức. [...] Không giống như in
toán tử, phương thức này không kiểm tra chuỗi nguyên mẫu của đối tượng.
foo
được công bố, một trong haitypeof foo === 'undefined'
hoặctypeof foo === typeof undefined