为什么null在JavaScript中被认为是一个对象?

正在检查

if ( object == null )
      Do something

if ( !object )
      Do something

?

还有:

null和undefined之间的区别是什么?


当前回答

JavaScript中许多不同的null检查的比较:

http://jsfiddle.net/aaronhoffman/DdRHB/5/

// Variables to test
var myNull = null;
var myObject = {};
var myStringEmpty = "";
var myStringWhiteSpace = " ";
var myStringHello = "hello";
var myIntZero = 0;
var myIntOne = 1;
var myBoolTrue = true;
var myBoolFalse = false;
var myUndefined;

...trim...

http://aaron-hoffman.blogspot.com/2013/04/javascript-null-checking-undefined-and.html

其他回答

Null不是一个对象,它是一个基本值。例如,不能向其添加属性。有时人们错误地认为它是一个对象,因为typeof null返回“object”。但这实际上是一个错误(甚至可能在ECMAScript 6中被修复)。

null和undefined的区别如下:

undefined: used by JavaScript and means “no value”. Uninitialized variables, missing parameters and unknown variables have that value. > var noValueYet; > console.log(noValueYet); undefined > function foo(x) { console.log(x) } > foo() undefined > var obj = {}; > console.log(obj.unknownProperty) undefined Accessing unknown variables, however, produces an exception: > unknownVariable ReferenceError: unknownVariable is not defined null: used by programmers to indicate “no value”, e.g. as a parameter to a function.

检查变量:

console.log(typeof unknownVariable === "undefined"); // true

var foo;
console.log(typeof foo === "undefined"); // true
console.log(foo === undefined); // true

var bar = null;
console.log(bar === null); // true

作为一般规则,在JavaScript中应该总是使用===,而永远不要使用==(==执行各种可能产生意外结果的转换)。检查x == null是一个边缘情况,因为它适用于null和undefined:

> null == null
true
> undefined == null
true

检查变量是否有值的一种常见方法是将其转换为布尔值,然后看它是否为真。该转换由if语句和布尔运算符!(“不”)。

function foo(param) {
    if (param) {
        // ...
    }
}
function foo(param) {
    if (! param) param = "abc";
}
function foo(param) {
    // || returns first operand that can't be converted to false
    param = param || "abc";
}

这种方法的缺点:以下所有值的计算结果都是false,所以你必须小心(例如,上面的检查不能区分undefined和0)。

定义,零 布尔值:假 数字:+0,-0,NaN 弦:“”

你可以通过使用boolean作为函数来测试到boolean的转换(通常它是一个构造函数,用于new):

> Boolean(null)
false
> Boolean("")
false
> Boolean(3-3)
false
> Boolean({})
true
> Boolean([])
true

使用null来定义没有值的东西,使用undefined当你期望一些东西可能根本没有定义。

例如,如果一个变量没有值,将其赋值为null。

var weDontHaveAValue = null;

如果你期望某些东西可能根本没有定义,例如一个可选的选项参数,使用undefined。

if (typeof args.optionalParam !== 'undefined') { }

与未定义相比,null的另一个有趣之处在于它可以递增。 X = undefined x + + Y = null y + + console.log(x) // NaN .log Console.log (y) // 0

这对于为计数器设置默认数值非常有用。你有多少次在声明中把一个变量设为-1 ?

Null是一个对象。它的类型是null。Undefined不是一个对象;其类型是未定义的。

null和undefined之间的区别是什么??

没有定义的属性是未定义的。null是一个对象。它的类型是object。Null是一个特殊值,表示“没有值”。Undefined不是一个对象,它的类型是Undefined。

你可以声明一个变量,将其设置为null,除了你会看到“null”和“undefined”打印出来之外,行为是相同的。你甚至可以将一个未定义的变量与null进行比较,反之亦然,条件将为真:

 undefined == null
 null == undefined

更多细节请参考JavaScript null和undefined之间的差异。

还有你的新编辑,是的

if (object == null)  does mean the same  if(!object)

当测试object是否为false时,它们都只满足测试是否为false时的条件,而不满足测试是否为true时的条件

检查这里:Javascript抓住你了