为什么null在JavaScript中被认为是一个对象?
正在检查
if ( object == null )
Do something
和
if ( !object )
Do something
?
还有:
null和undefined之间的区别是什么?
为什么null在JavaScript中被认为是一个对象?
正在检查
if ( object == null )
Do something
和
if ( !object )
Do something
?
还有:
null和undefined之间的区别是什么?
当前回答
typeof null; // object
typeof undefined; // undefined
null值表示有意不存在任何对象值。它是JavaScript的基本值之一,在布尔操作中被视为假值。
var x = null;
var y;
X被声明并定义为null
Y声明了,但没有定义。它声明时没有值,所以没有定义。
Z没有被声明,所以如果你试图使用Z,它也是未定义的。
其他回答
Null和undefined对于值相等都是false (Null ==undefined):它们都崩溃为布尔值false。它们不是同一个对象(null!==undefined)。
Undefined是全局对象(浏览器中的“window”)的一个属性,但它是一个基本类型,而不是对象本身。它是未初始化的变量和函数的默认值,没有返回语句。
null是Object的一个实例。null用于返回集合对象以指示空结果的DOM方法,该方法提供false值而不指示错误。
一些精度:
Null和undefined是两个不同的值。一个表示没有名称的值,另一个表示没有名称。
对于if(o), if中发生的事情如下所示:
括号o中的表达式被求值,然后if语句开始对括号中的表达式的值进行类型强制——在我们的例子中是o。
JavaScript中的Falsy(将被强制为false)值为:",null, undefined, 0和false。
理解null和undefined的一种方法是了解它们出现的位置。
在以下情况下期望返回空值:
查询DOM的方法 console.log (window.document.getElementById(“nonExistentElement”)); / /输出:零 从Ajax请求接收到的JSON响应
{
name: "Bob",
address: null
}
RegEx.exec。 新功能处于不断变化的状态。下面返回null:
var proto = Object.getPrototypeOf(Object.getPrototypeOf({}));
// But this returns undefined:
Object.getOwnPropertyDescriptor({}, "a");
所有其他不存在的情况都用undefined表示(由@Axel指出)。以下每一个都打印为“undefined”:
var uninitalised;
console.log(uninitalised);
var obj = {};
console.log(obj.nonExistent);
function missingParam(missing){
console.log(missing);
}
missingParam();
var arr = [];
console.log(arr.pop());
当然,如果你决定写var unitialized = null;或者你自己从一个方法中返回null,那么你在其他情况下也会出现null。但这应该是很明显的。
第三种情况是当你想访问一个变量,但你甚至不知道它是否已经声明。在这种情况下,使用typeof来避免引用错误:
if(typeof unknown !== "undefined"){
//use unknown
}
总之,在操作DOM、处理Ajax或使用某些ECMAScript 5特性时检查是否为空。对于所有其他情况,检查undefined严格相等是安全的:
if(value === undefined){
// stuff
}
看看这个:
<script>
function f(a){
alert(typeof(a));
if (a==null) alert('null');
a?alert(true):alert(false);
}
</script>
//return:
<button onclick="f()">nothing</button> //undefined null false
<button onclick="f(null)">null</button> //object null false
<button onclick="f('')">empty</button> //string false
<button onclick="f(0)">zero</button> //number false
<button onclick="f(1)">int</button> //number true
<button onclick="f('x')">str</button> //string true
typeof null; // object
typeof undefined; // undefined
null值表示有意不存在任何对象值。它是JavaScript的基本值之一,在布尔操作中被视为假值。
var x = null;
var y;
X被声明并定义为null
Y声明了,但没有定义。它声明时没有值,所以没有定义。
Z没有被声明,所以如果你试图使用Z,它也是未定义的。