Câu trả lời:
Bạn có thể sử dụng typeof
toán tử một cách an toàn trên các biến không xác định.
Nếu nó đã được gán bất kỳ giá trị nào, bao gồm null, typeof sẽ trả về một cái gì đó không phải là không xác định. typeof luôn trả về một chuỗi.
vì thế
if (typeof maybeObject != "undefined") {
alert("GOT THERE");
}
Có rất nhiều sự thật nửa vời ở đây, vì vậy tôi nghĩ rằng tôi làm cho một số điều rõ ràng hơn.
Trên thực tế, bạn không thể biết chính xác nếu một biến tồn tại (trừ khi bạn muốn bọc mỗi dòng thứ hai vào một khối thử bắt).
Lý do là Javascript có giá trị nổi tiếng này trong undefined
đó nổi bật không có nghĩa là biến không được xác định hoặc nó không tồn tạiundefined !== not defined
var a;
alert(typeof a); // undefined (declared without a value)
alert(typeof b); // undefined (not declared)
Vì vậy, cả một biến tồn tại và một biến khác không thể báo cáo cho bạn undefined
loại.
Đối với quan niệm sai lầm của @ Kevin , null == undefined
. Đó là do sự ép buộc kiểu, và đó là lý do chính tại sao Crockford tiếp tục nói với tất cả những người không chắc chắn về điều này luôn luôn sử dụng toán tử bình đẳng nghiêm ngặt ===
để kiểm tra các giá trị có thể sai lệch. null !== undefined
cung cấp cho bạn những gì bạn có thể mong đợi. Cũng xin lưu ý, đó foo != null
có thể là một cách hiệu quả để kiểm tra nếu một biến không phải undefined
cũng không null
. Tất nhiên bạn có thể rõ ràng, bởi vì nó có thể giúp dễ đọc.
Nếu bạn hạn chế câu hỏi để kiểm tra xem một đối tượng có tồn tại hay không, typeof o == "object"
có thể là một ý tưởng tốt, ngoại trừ nếu bạn không xem xét các đối tượng mảng, vì điều này cũng sẽ được báo cáo là loại object
có thể khiến bạn hơi bối rối. Chưa kể điều đó typeof null
cũng sẽ cung cấp cho bạn object
mà đơn giản là sai.
Diện tích nguyên thủy mà bạn thực sự cần phải cẩn thận về typeof
, undefined
, null
, unknown
và misteries khác là những vật chủ. Họ không thể tin tưởng được. Họ được tự do làm hầu hết mọi thứ bẩn thỉu họ muốn. Vì vậy, hãy cẩn thận với chúng, kiểm tra chức năng nếu bạn có thể, bởi vì đó là cách an toàn duy nhất để sử dụng một tính năng thậm chí không tồn tại.
foo!=null
sẽ tạo ra một ReferenceError nếu foo
không được xác định. Vì vậy, tốt hơn là sử dụng typeof
, trừ khi bạn có kế hoạch bắt ngoại lệ.
undefined !== not defined
&&foo != null can be an effective way to check if a variable is neither 'undefined' nor 'null'
. Tôi đã không nói != null
là tốt để kiểm tra nếu nó tồn tại. Bạn đang đưa nó ra khỏi bối cảnh. (Tôi cũng đã đề cập rằng đó là một sidenote, không liên quan chặt chẽ đến chủ đề của câu hỏi của OP)
undefined
. Chúng không giống nhau. (note) it can be used !== you should use
. Sử dụng thông thường trong khi đọc. Khi biến được khai báo (danh sách tham số hoặc ở nơi khác) và bạn muốn kiểm tra xem nó có giá trị hay không, !=
null hoàn toàn an toàn. Đó là một usecase khác với những gì OP yêu cầu, đó là lý do tại sao tôi xâm nhập nó như một ghi chú. Toàn bộ đoạn nói về bài viết của Kevin và loại btw cưỡng chế. Như bạn có thể nhận thấy nếu bạn đọc cẩn thận.
!= null
khi bạn biết rằng biến đã được khai báo. Điều này rất hữu ích để kiểm tra các đối số chức năng, xem xét:var hasValue = function(foo) {return foo != null}
Hai lối.
Bạn có thể kiểm tra một đối tượng cục bộ bằng cách sử dụng typeof:
if (typeof object !== "undefined") {}
Bạn có thể kiểm tra một đối tượng toàn cầu (một đối tượng được xác định trên phạm vi toàn cầu) bằng cách kiểm tra đối tượng cửa sổ:
if (window.FormData) {}
Nếu đó là một đối tượng toàn cầu, bạn có thể sử dụng if (!window.maybeObject)
window.hasOwnProperty('maybeObject')
là dễ đọc hơn một chút, nếu đó là một đối tượng toàn cầu
Bạn có thể sử dụng "typeof".
if(typeof maybeObject != "undefined")
alert("GOT HERE");
Các chủ đề đã được mở khá lâu trước đây. Tôi nghĩ trong khi đó, việc sử dụng toán tử ternary là lựa chọn đơn giản nhất:
maybeObject ? console.log(maybeObject.id) : ""
var maybeObject = typeof maybeObject !== "undefined" ? Chart:false;
và kiểm tra nếu không false
.
Tôi đã từng chỉ làm một if(maybeObject)
kiểm tra null trong javascripts của tôi.
if(maybeObject){
alert("GOT HERE");
}
Vì vậy, chỉ khi maybeObject
- là một đối tượng, cảnh báo sẽ được hiển thị. Tôi có một ví dụ trong trang web của tôi.
https://sites.google.com/site/javaerrorsandsolutions/home/javascript-dynamic-checkboxes
maybeObject
có 0, 0.0, or ""
, nó sẽ kiểm tra sai
Tôi vừa mới thử nghiệm các ví dụ typeOf ở trên và không có ví dụ nào phù hợp với tôi, vì vậy thay vào đó tôi đã sử dụng ví dụ này:
btnAdd = document.getElementById("elementNotLoadedYet");
if (btnAdd) {
btnAdd.textContent = "Some text here";
} else {
alert("not detected!");
}
Ngoài việc kiểm tra sự tồn tại của đối tượng / biến, bạn có thể muốn cung cấp đầu ra "trường hợp xấu nhất" hoặc ít nhất là nhốt nó vào một cảnh báo để nó không bị chú ý.
Ví dụ về chức năng kiểm tra, cung cấp thay thế và bắt lỗi.
function fillForm(obj) {
try {
var output;
output = (typeof obj !== 'undefined') ? obj : '';
return (output);
}
catch (err) {
// If an error was thrown, sent it as an alert
// to help with debugging any problems
alert(err.toString());
// If the obj doesn't exist or it's empty
// I want to fill the form with ""
return ('');
} // catch End
} // fillForm End
Tôi cũng tạo ra điều này bởi vì đối tượng tôi truyền cho nó có thể là x, xm, xm [z] và typeof xm [z] sẽ không thành công nếu có lỗi nếu xm không tồn tại.
Tôi hy vọng nó sẽ giúp. (BTW, tôi là người mới với JS)
Nếu bạn chỉ quan tâm đến sự tồn tại của nó (đã được khai báo chưa?), Câu trả lời được phê duyệt là đủ:
if (typeof maybeObject != "undefined") {
alert("GOT THERE");
}
Nếu bạn quan tâm đến việc nó có giá trị thực tế, bạn nên thêm:
if (typeof maybeObject != "undefined" && maybeObject != null ) {
alert("GOT THERE");
}
Như typeof( null ) == "object"
ví dụ bar = { x: 1, y: 2, z: null}
typeof( bar.z ) == "object"
typeof( bar.not_present ) == "undefined"
bằng cách này, bạn kiểm tra xem nó có null
hay không undefined
và vì typeof
không có lỗi nếu giá trị không tồn tại cộng với &&
các mạch ngắn, bạn sẽ không bao giờ gặp lỗi thời gian chạy.
Cá nhân, tôi khuyên bạn nên thêm một người trợ giúp fn ở đâu đó (và đừng tin tưởng typeof()
):
function exists(data){
data !== null && data !== undefined
}
if( exists( maybeObject ) ){
alert("Got here!");
}
if (n === Object(n)) {
// code
}
đặt giá trị Hộp văn bản thành một khung thành khung nội tuyến bằng bảng điều khiển thẻ div alignmnt. Vì vậy, trước hết, trước khi đặt giá trị, chúng tôi cần kiểm tra khung bảng được chọn có sẵn hoặc không sử dụng các mã sau:
Mã Javascript:
/////////////////////////////////////////
<script>
function set_TextID()
{
try
{
if(!parent.frames["entry"])
{
alert("Frame object not found");
}
else
{
var setText=document.getElementById("formx").value;
parent.frames["entry"].document.getElementById("form_id").value=setText;
}
if(!parent.frames["education"])
{
alert("Frame object not found");
}
else
{
var setText=document.getElementById("formx").value;
parent.frames["education"].document.getElementById("form_id").value=setText;
}
if(!parent.frames["contact"])
{
alert("Frame object not found");
}
else
{
var setText=document.getElementById("formx").value;
parent.frames["contact"].document.getElementById("form_id").value=setText;
}
}catch(exception){}
}
</script>
zero và null là các con trỏ ẩn. Nếu bạn không thực hiện số học, so sánh hoặc in '0' để sàng lọc thì không cần phải thực sự nhập nó. Nó ngầm. Như trong ngụ ý. Typeof cũng không bắt buộc vì lý do tương tự. Đồng hồ đeo tay.
if (obj) console.log ("tồn tại");
Tôi đã không thấy yêu cầu cho một hoặc không có ở đó cho nó không được bao gồm như. Nhiều như tôi thích nội dung bổ sung không phù hợp với câu hỏi. Hãy giữ cho nó đơn giản.
if (!maybeObject)
- nhưng thực sự, tiêu đề yêu cầu ngược lại.
Hoặc, tất cả bạn có thể bắt đầu sử dụng phương thức tồn tại () độc quyền của tôi thay vào đó và có thể thực hiện những điều được coi là không thể. I E:
Những thứ như : exists("blabla")
, hoặc thậm chí: exists("foreignObject.guessedProperty.guessNext.propertyNeeded")
cũng có thể ...
!==
để so sánh.