为什么null是一个对象,null和undefined有什么区别?
为什么null
在JavaScript中被认为是一个object
?
正在检查
if ( object == null )
Do something
一样
if ( !object )
Do something
?
并且:
null
和undefined
什么区别?
(name is undefined)
你:什么是name
? (*)
JavaScript: name
? 什么是name
? 我不知道你在说什么。 你以前从未提到任何name
。 你在(客户端)方面看到了其他一些脚本语言吗?
name = null;
你:什么是name
?
JavaScript:我不知道。
简而言之; undefined
是没有事物概念存在的地方; 它没有类型,并且在该范围之前从未被引用过; null
是事物已知存在的地方,但它不知道它的价值是什么。
有一点要记住的是,在概念上, null
不是,就像false
或者""
等一样,即使它们在类型转换后等同
name = false;
你:什么是name
?
JavaScript:布尔值为false。
name = '';
你:什么是name
?
JavaScript:空字符串
*:这个上下文中的name
意味着一个从未被定义过的变量。 它可能是任何未定义的变量。 但是,名称是任何HTML表单元素的属性。 它回到途中,并在ID之前很好地建立起来。 这很有用,因为ID必须是唯一的,但名称不一定是。
差异可以概括为以下片段:
alert(typeof(null)); // object
alert(typeof(undefined)); // undefined
alert(null !== undefined) //true
alert(null == undefined) //true
检查
object == null
与检查if ( !object )
。
后者等于! Boolean(object)
! Boolean(object)
,因为一元!
操作符自动将右操作数转换为布尔值。
由于Boolean(null)
等于false,那么!false === true
。
因此,如果您的对象不为null ,但为false或0或“” ,则检查将通过,因为:
alert(Boolean(null)) //false
alert(Boolean(0)) //false
alert(Boolean("")) //false
null
不是一个对象,它是一个原始值。 例如,你不能添加属性。 有时人们错误地认为它是一个对象,因为typeof null
返回"object"
。 但这实际上是一个错误(甚至可能在ECMAScript 6中修复)。
null
和undefined
之间的区别如下:
undefined
:由JavaScript使用,意思是“没有价值”。 未初始化的变量,缺少的参数和未知变量都具有该值。
> var noValueYet;
> console.log(noValueYet);
undefined
> function foo(x) { console.log(x) }
> foo()
undefined
> var obj = {};
> console.log(obj.unknownProperty)
undefined
然而,访问未知变量会产生一个异常:
> unknownVariable
ReferenceError: unknownVariable is not defined
null
:程序员用来指示“无值”,例如作为函数的参数。
检查一个变量:
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
检查变量是否具有值的常用方法是将其转换为布尔值并查看它是否为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
)。
undefined
, null
false
+0
, -0
, NaN
""
您可以使用Boolean
作为函数来测试转换为布尔值(通常它是一个构造函数,用于new
):
> Boolean(null)
false
> Boolean("")
false
> Boolean(3-3)
false
> Boolean({})
true
> Boolean([])
true
链接地址: http://www.djcxy.com/p/2135.html
上一篇: Why is null an object and what's the difference between null and undefined?