Javascript 将未定义变量赋值给已声明但未初始化的变量?

Javascript 将未定义变量赋值给已声明但未初始化的变量?,javascript,null,undefined,Javascript,Null,Undefined,发生以下情况有什么特殊原因吗 var newVar; newVar; //returns "undefined" 当出现以下情况时,它会变得非常混乱: newVar == undefined; //true newVar == null; //true 我读过一些线程,它们建议使用typeof运算符来检测变量是否已声明但已初始化,并始终使用null初始化已声明的变量,但是: typeof newVar //returns object 虽然我知道(如果我错了,请纠正我)null是一个对象占

发生以下情况有什么特殊原因吗

var newVar;
newVar; //returns "undefined"
当出现以下情况时,它会变得非常混乱:

newVar == undefined; //true
newVar == null; //true
我读过一些线程,它们建议使用typeof运算符来检测变量是否已声明但已初始化,并始终使用null初始化已声明的变量,但是:

typeof newVar //returns object
虽然我知道(如果我错了,请纠正我)
null
是一个对象占位符,因此是一种对象类型,但在JavaScript中处理这种情况的方式确实让我感到困惑

面向Web开发人员的专业JS说:

null
以何种方式是
未定义的
的派生


抱歉,问题太多了-但首先要感谢所有的答案。

未定义的
null
之间的关系可能会令人困惑,希望这能澄清这一点:

首先,它们是价值观:

未定义的类型只有一个值,称为
Undefined
。任何未赋值的变量都具有未定义的值

(这也解释了为什么变量最初的值
未定义

Null类型只有一个值,称为
Null

如果使用严格的比较,则更合理:

null === undefined // false
那么为什么
null==undefined
会导致
true

二,。如果x为null而y未定义,则返回true

三,。如果x未定义且y为null,则返回true

所以

null
以何种方式是
未定义的
的派生

事实并非如此。它们是两种不同数据类型的两个不同值。也许在概念上,它是一种“衍生产品”,但不是从技术角度。这本书在这一点上要么过于简化,要么过于复杂


虽然我知道(如果我错了,请纠正我)null是一个对象占位符,因此是一种对象类型,但在JavaScript中处理这种情况的方式确实让我感到困惑


typeof null
返回
“对象”
。这很令人困惑,因为
null
的数据类型不是Object(如顶部所述)。你是对的,也许
null
的最初目的是表示没有对象,但事实上,它可以用来表示没有任何值。

我非常尊敬扎卡斯先生,但我不认为
未定义的
在任何方面都是
null
的“派生”。我甚至不知道那是什么意思。