为什么在JavaScript中被null
视为object
?
正在检查
if ( object == null )
Do something
与...相同
if ( !object )
Do something
?
并且:
null
和之间有什么区别undefined
?
为什么在JavaScript中被null
视为object
?
正在检查
if ( object == null )
Do something
与...相同
if ( !object )
Do something
?
并且:
null
和之间有什么区别undefined
?
考虑“空”的最好方法是回忆一下数据库中类似概念的用法,它表示一个字段根本不包含任何值。
这对于编写更易于调试的程序是非常有用的技术。“未定义”变量可能是错误的结果…… (您怎么知道?) ……但是,如果变量包含值“ null”,则您会知道“有人在该程序的某个位置,将其设置为因此,我建议,当您需要删除变量的值时,请不要“删除”……将其设置为“ null”。旧值将被孤立,不久将被垃圾回收;新值是“没有值(现在)”。在这两种情况下,变量的状态都是确定的:“显然,它是故意那样做的。”
在Javascript null
中,不是object
类型,而是primitave
类型。
有什么区别?
未定义是指尚未设置的指针。
空是指空指针,例如,某些东西已手动将变量设置为类型null
与undefined相比,null的另一个有趣之处在于它可以递增。
x = undefined
x++
y = null
y++
console.log(x) // NaN
console.log(y) // 0
这对于设置计数器的默认数值很有用。您在变量声明中将变量设置为-1多少次?
例如window.someWeirdProperty
是未定义的,所以
"window.someWeirdProperty === null"
评估为false
"window.someWeirdProperty === undefined"
评估为true。
此外checkif if (!o)
是不一样的检查if (o == null)
的o
是false
。
以下功能说明了原因并能够解决差异:
function test() {
var myObj = {};
console.log(myObj.myProperty);
myObj.myProperty = null;
console.log(myObj.myProperty);
}
如果你打电话
test();
你正在
未定义
空值
第一个console.log(...)
尝试myProperty
从myObj
尚未定义的位置获取数据-因此它返回“未定义”状态。在为它分配了null之后,第二个console.log(...)
返回值显然是“ null”,因为myProperty
它存在,但已为其null
分配了值。
为了能够查询这种差异,JavaScript具有null
和undefined
:尽管null
是-与其他语言一样,对象undefined
也不能是对象,因为没有可用的实例(甚至不是null
实例)。
一些精度:
null和undefined 是两个不同的值。一个代表缺少名称的值,另一个代表缺少名称。
发生if
以下情况if( o )
:
对括号o中的表达式进行求值,然后if
对括号中的表达式的值进行类型强制-在本例中为踢o
。
JavaScript中的Falsy(将被强制转换为false)的值为:”,null,undefined,0和false。
null
是一个对象。其类型为null。undefined
不是对象 其类型未定义。
要添加到的答案之间有什么differrence undefined
和null
,从JavaScript的权威指南第6版,在此页第41页:
您可能会考虑
undefined
表示系统级别的,意外的或类似错误的值null
缺失,并表示程序级别的,正常的或预期的值缺失。如果您需要将这些值之一分配给变量或属性,或者将这些值之一传递给函数,null
则几乎总是正确的选择。
JavaScript中许多不同的空检查的比较:
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和undefined均为false(null == undefined):它们都折叠为布尔值false。它们不是同一对象(null!== undefined)。
undefined是全局对象的属性(浏览器中为“窗口”),但它是原始类型,而不是对象本身。这是未初始化的变量和函数的默认值,这些变量和函数以没有return语句的形式结束。
null是Object的实例。对于用于返回集合对象以指示空结果的DOM方法,将使用null,该方法提供错误值而未指示错误。
理解null和undefined的一种方法是了解每种情况的发生位置。
在以下情况下,期望返回空值:
查询DOM的方法
console.log(window.document.getElementById("nonExistentElement"));
//Prints: null
从Ajax请求收到的JSON响应
{
name: "Bob",
address: null
}
不断变化的新功能。以下返回null:
var proto = Object.getPrototypeOf(Object.getPrototypeOf({}));
// But this returns undefined:
Object.getOwnPropertyDescriptor({}, "a");
所有其他不存在的情况都由undefined表示(如@Axel所示)。以下每个打印“未定义”:
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功能时,请检查是否为null。对于所有其他情况,可以使用严格的相等性检查undefined是安全的:
if(value === undefined){
// stuff
}
差异可以概括为以下代码段:
alert(typeof(null)); // object
alert(typeof(undefined)); // undefined
alert(null !== undefined) //true
alert(null == undefined) //true
检查
object == null
检查是不同的if ( !object )
。
后者等于! Boolean(object)
,因为一元运算!
符会自动将正确的操作数转换为布尔值。
既然Boolean(null)
等于假,那么!false === true
。
因此,如果您的对象不是null,而是 false或0或“”,则检查将通过,因为:
alert(Boolean(null)) //false
alert(Boolean(0)) //false
alert(Boolean("")) //false
null和undefined有什么区别?
没有定义的属性未定义。null是一个对象。它的类型是对象。null是一个特殊值,表示“无值。undefined不是对象,类型是undefined。
您可以声明一个变量,将其设置为null,其行为是相同的,除了看到的是“ null”和“ undefined”。您甚至可以将未定义的变量与null进行比较,反之亦然,条件将为true:
undefined == null
null == undefined
有关更多详细信息,请参见JavaScript null与undefined之间的区别。
和您的新编辑 是
if (object == null) does mean the same if(!object)
在测试object是否为false时,它们都仅在测试false时满足条件,而在true时不满足
在这里检查:Javascript陷阱
var x = null;
x定义为null
y未定义;//因为我没有定义它
if (!x)
null被评估为false
(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
在此上下文中是指从未定义的变量。它可以是任何未定义的变量,但是name是几乎任何HTML表单元素的属性。它沿路前进,早在id之前就已建立。这很有用,因为id必须是唯一的,但名称不必是唯一的。
2. Undefined是类型本身,而Null是对象。
3 Javascript本身可以将任何未分配的变量初始化为undefined,但永远不能将变量的值设置为null。这必须以编程方式完成。