Trong JavaScript, điều này được gọi là undefined
, đó là một giá trị sentinel duy nhất, khác với null
.
Bạn nhận được undefined
bằng cách đánh giá biến toàn cục undefined
hoặc thuộc tính của đối tượng, không được xác định hoặc bằng cách đánh giá một câu lệnh, không trả về giá trị, chẳng hạn như gọi hàm, không trả về bất cứ thứ gì hoặc khối hoặc một khai báo biến (mặc dù hai biểu thức không hợp lệ, vì vậy bạn sẽ chỉ gặp điều đó trong REPL JavaScript).
Khi undefined
giá trị bị ép buộc Object
trở thành null
, nó sẽ trở thành , nhưng không phải vậy null
.
Dưới đây là một minh họa nhỏ:
var a = [1, 2, 3];//undefined
a[0];//1
a[4];//undefined
var o = { foo: "123" };//undefined
o.foo;//"123";
o.bar;//undefined
function bar() { return null; };//undefined
bar();//null
function foo() { /*just an empty block*/};//undefined
foo();//undefined
typeof undefined;//"undefined"
typeof null;//"object"
null == undefined;//true - that is because undefined is converted to an object for comparison and thus yields null
null === undefined;//false - because they are not the same
Tôi nghĩ thật hợp lý khi gọi các giá trị không xác định (ngược lại với các giá trị được xác định là null
) không xác định, nếu đó là câu hỏi của bạn. Sử dụng một giá trị sentinel duy nhất để truyền đạt sự vắng mặt của một giá trị được xác định là một giải pháp khả thi cho các ngôn ngữ động, mặc dù nó thường được hiểu kém.