Làm cách nào để kiểm tra một biến nếu nó
null
hoặcundefined
và sự khác biệt giữanull
và làundefined
gì?Sự khác biệt giữa
==
và===
(thật khó để tìm kiếm Google cho "===")?
Làm cách nào để kiểm tra một biến nếu nó null
hoặc undefined
và sự khác biệt giữa null
và là undefined
gì?
Sự khác biệt giữa ==
và ===
(thật khó để tìm kiếm Google cho "===")?
Câu trả lời:
Làm cách nào để kiểm tra một biến nếu nó
null
hoặcundefined
...
Là biến null
:
if (a === null)
// or
if (a == null) // but see note below
... nhưng lưu ý điều sau cũng sẽ đúng nếu a
có undefined
.
Là nó undefined
:
if (typeof a === "undefined")
// or
if (a === undefined)
// or
if (a == undefined) // but see note below
... nhưng một lần nữa, lưu ý rằng cái cuối cùng là mơ hồ; nó cũng sẽ đúng nếu a
là null
.
Bây giờ, mặc dù ở trên, cách thông thường để kiểm tra những thứ đó là sử dụng thực tế rằng chúng là chim ưng :
if (!a) {
// `a` is falsey, which includes `undefined` and `null`
// (and `""`, and `0`, and `NaN`, and [of course] `false`)
}
Điều này được xác định bởi ToBoolean trong thông số kỹ thuật.
... Và sự khác biệt giữa
null
và làundefined
gì?
Cả hai giá trị thường được sử dụng để chỉ sự vắng mặt của một cái gì đó. undefined
là một biến chung hơn, được sử dụng làm giá trị mặc định của các biến cho đến khi chúng được gán một số giá trị khác, làm giá trị của các đối số hàm không được cung cấp khi hàm được gọi và là giá trị bạn nhận được khi bạn hỏi một đối tượng đối với một tài sản nó không có. Nhưng nó cũng có thể được sử dụng rõ ràng trong tất cả các tình huống đó. (Có sự khác biệt giữa một đối tượng không có thuộc tính và có thuộc tính có giá trị undefined
; có sự khác biệt giữa việc gọi hàm với giá trị undefined
cho đối số và loại bỏ hoàn toàn đối số đó.)
null
cụ thể hơn một chút so với undefined
: Đó là một tham chiếu đối tượng trống. Tất nhiên, JavaScript được gõ một cách lỏng lẻo, nhưng không phải tất cả những thứ mà JavaScript tương tác với đều được gõ một cách lỏng lẻo. Nếu một API như DOM trong các trình duyệt cần một tham chiếu đối tượng đó là trống, chúng tôi sử dụng null
, không phải undefined
. Và tương tự, getElementById
hoạt động của DOM trả về một tham chiếu đối tượng - hoặc là một tham chiếu hợp lệ (nếu nó tìm thấy phần tử DOM) hoặc null
(nếu nó không).
Thật thú vị (hoặc không), chúng là loại riêng của chúng. Có thể nói, null
là giá trị duy nhất trong loại Null và undefined
là giá trị duy nhất trong loại Không xác định.
Sự khác biệt giữa "==" và "==="
Sự khác biệt duy nhất giữa chúng là ==
loại cưỡng chế để cố gắng làm cho các giá trị khớp với nhau và ===
sẽ không. Vì vậy, ví dụ "1" == 1
là đúng, bởi vì "1"
ép buộc 1
. Nhưng "1" === 1
là sai , vì các loại không khớp. ( "1" !== 1
là đúng.) Bước đầu tiên (thực) ===
là "Các loại toán hạng có giống nhau không?" và nếu câu trả lời là "không", kết quả là false
. Nếu các loại là giống nhau, nó làm chính xác những gì ==
làm.
Loại cưỡng chế sử dụng các quy tắc khá phức tạp và có thể có kết quả đáng ngạc nhiên (ví dụ, "" == 0
là đúng).
Thêm trong thông số kỹ thuật:
==
còn gọi là bình đẳng "lỏng lẻo")===
)if (a) { ... }
sẽ có nghĩa là "nếu a
là sự thật", trong đó "sự thật" là một giá trị khác không, không rỗng, không xác định, không sai, không rỗng. :-)
null
là không phải là một đối tượng , nó là một tham chiếu đối tượng có nghĩa là "không có đối tượng". Điều này rất quan trọng, bởi vì đó là những gì được sử dụng với các giao diện do máy chủ cung cấp khi chúng cung cấp các tham chiếu đối tượng nhưng không có cái nào để cung cấp (ví dụ: node.nextSibling
khi nào node
là phần tử cuối cùng trong cha mẹ của nó hoặc getElementById
khi không có phần tử nào có ID đó). Công nghệ mà máy chủ sử dụng cho việc này có thể không linh hoạt như JavaScript về các loại biến / thuộc tính, do đó cần phải có một null
obj ref (trái ngược với undefined
).
typeof null
trả lại "đối tượng" có ý nghĩa. Giá trị duy nhất khác có ý nghĩa sẽ là "null", vì nó chắc chắn sẽ trả về một cái gì đó khác với typeof undefined
. null đại diện cho một tham chiếu đối tượng null, ít nhất, có nghĩa là biến giữ nó có nghĩa là đối với một số loại 'đối tượng'. Nếu đó là một sai lầm, đó là một sai lầm tốt. Dù sao, liên quan đến câu trả lời, mẹo về undefined
! == undefined
trong quá trình tạo kịch bản chéo cửa sổ là điều tốt để biết, đặc biệt là cho mục đích gỡ lỗi.
Sự khác biệt là tinh tế.
Trong JavaScript, một undefined
biến là một biến mà chưa bao giờ được khai báo hoặc không bao giờ được gán một giá trị. Giả sử bạn khai báo var a;
chẳng hạn, sau đó a
sẽ được undefined
, bởi vì nó không bao giờ được gán bất kỳ giá trị nào.
Nhưng nếu bạn sau đó chỉ định a = null;
thì a
bây giờ sẽ được null
. Trong JavaScript null
là một đối tượng (hãy thử typeof null
trong bảng điều khiển JavaScript nếu bạn không tin tôi), điều đó có nghĩa là null là một giá trị (thực tế thậm chí undefined
là một giá trị).
Thí dụ:
var a;
typeof a; # => "undefined"
a = null;
typeof null; # => "object"
Điều này có thể chứng minh hữu ích trong các đối số chức năng. Bạn có thể muốn có một giá trị mặc định, nhưng coi null là chấp nhận được. Trong trường hợp bạn có thể làm:
function doSomething(first, second, optional) {
if (typeof optional === "undefined") {
optional = "three";
}
// do something
}
Nếu bạn bỏ qua optional
tham số doSomething(1, 2) then
tùy chọn sẽ là "three"
chuỗi nhưng nếu bạn vượt qua doSomething(1, 2, null)
thì tùy chọn sẽ là null
.
Đối với các bộ so sánh bằng nhau ==
và hoàn toàn bằng nhau ===
, cái đầu tiên là loại yếu, trong khi bằng nhau cũng kiểm tra loại giá trị. Điều đó có nghĩa là 0 == "0"
sẽ trở lại đúng sự thật; while 0 === "0"
sẽ trả về false, vì một số không phải là một chuỗi.
Bạn có thể sử dụng các toán tử để kiểm tra giữa undefined
một null
. Ví dụ:
null === null # => true
undefined === undefined # => true
undefined === null # => false
undefined == null # => true
Trường hợp cuối cùng rất thú vị, vì nó cho phép bạn kiểm tra xem một biến là không xác định hoặc null và không có gì khác:
function test(val) {
return val == null;
}
test(null); # => true
test(undefined); # => true
Thông số kỹ thuật là nơi để trả lời đầy đủ cho những câu hỏi này. Đây là một bản tóm tắt:
x
, bạn có thể:null
bằng cách so sánh trực tiếp bằng cách sử dụng ===
. Thí dụ:x === null
undefined
bằng một trong hai phương pháp cơ bản: so sánh trực tiếp với undefined
hoặc typeof
. Vì nhiều lý do , tôi thích typeof x === "undefined"
.null
và undefined
bằng cách sử dụng ==
và dựa vào các quy tắc cưỡng chế hơi phức tạp có nghĩa là x == null
thực hiện chính xác những gì bạn muốn hay không.==
và ===
là nếu các toán hạng có các loại khác nhau, ===
sẽ luôn trả về false
trong khi ==
sẽ chuyển đổi một hoặc cả hai toán hạng thành cùng loại bằng cách sử dụng các quy tắc dẫn đến một số hành vi hơi không trực quan. Nếu các toán hạng có cùng loại (ví dụ cả hai là các chuỗi, chẳng hạn như trong typeof
so sánh ở trên) ==
và ===
sẽ hoạt động giống hệt nhau.Đọc thêm:
Làm cách nào để kiểm tra một biến nếu nó không hoặc không xác định
chỉ cần kiểm tra xem một biến có giá trị hợp lệ như thế này không:
if(variable)
nó sẽ trả về true nếu biến không chứa:
chưa xác định
Nó có nghĩa là biến chưa được intialized.
Thí dụ :
var x;
if(x){ //you can check like this
//code.
}
bằng (==)
Nó chỉ kiểm tra giá trị bằng với không phải kiểu dữ liệu.
Thí dụ :
var x = true;
var y = new Boolean(true);
x == y ; //returns true
Bởi vì nó chỉ kiểm tra giá trị.
Bằng nghiêm ngặt (===)
Kiểm tra giá trị và kiểu dữ liệu phải giống nhau.
Thí dụ :
var x = true;
var y = new Boolean(true);
x===y; //returns false.
Bởi vì nó kiểm tra kiểu dữ liệu x là kiểu nguyên thủy và y là đối tượng boolean.
Quảng cáo 1. null
không phải là định danh cho một thuộc tính của đối tượng toàn cầu, giống như undefined
có thể là
Quảng cáo 2. Các ===
giá trị và loại kiểm tra. Không ==
yêu cầu cùng loại và thực hiện chuyển đổi ngầm trước khi so sánh (sử dụng .valueOf()
và .toString()
). Ở đây bạn có tất cả ( src ):
nếu
== (phủ định của nó ! = )
=== (phủ định của nó ! == )
document.all == null
vàdocument.all !== null
Nếu kiểm tra (logic) của bạn là phủ định (!) Và bạn muốn nắm bắt cả JS null
và undefined
(vì các Trình duyệt khác nhau sẽ cho bạn kết quả khác nhau), bạn sẽ sử dụng phép so sánh ít hạn chế hơn: vd:
var ItemID = Item.get_id();
if (ItemID != null)
{
//do stuff
}
Điều này sẽ nắm bắt cả hai null
vàundefined
Hãy thử với logic khác nhau . Bạn có thể sử dụng mã dưới đây để kiểm tra tất cả bốn (4) điều kiện để xác thực như không null, không trống, không xác định và không zero chỉ sử dụng mã này (! (! (Biến))) trong javascript và jquery.
function myFunction() {
var data; //The Values can be like as null, blank, undefined, zero you can test
if(!(!(data)))
{
//If data has valid value
alert("data "+data);
}
else
{
//If data has null, blank, undefined, zero etc.
alert("data is "+data);
}
}
==
và===
được mô tả tốt ở đây .