为什么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之间的区别是什么?
当前回答
Null和undefined对于值相等都是false (Null ==undefined):它们都崩溃为布尔值false。它们不是同一个对象(null!==undefined)。
Undefined是全局对象(浏览器中的“window”)的一个属性,但它是一个基本类型,而不是对象本身。它是未初始化的变量和函数的默认值,没有返回语句。
null是Object的一个实例。null用于返回集合对象以指示空结果的DOM方法,该方法提供false值而不指示错误。
其他回答
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
未定义和未定义不是一回事。
age;
年龄的价值是什么?
电脑:好的,让我查一下我的内存/参考表.....在这一点上(你问的时间),我没有看到任何标识符名为年龄,不在这个范围/上下文或任何父范围/上下文;我不知道年龄。也许稍后我会遇到一个指令,将该标识符添加到内存中,但它现在不存在。
var age;
你:年龄的价值是什么;
电脑:好的,检查一下我的记忆……我在引用表中看到一个标识符,它的名字是age,但在我添加它的时候,没有值或指针或任何东西被分配给它,所以我不知道;你可以认为它(年龄)空了/什么都没有/没用。
var age = null;
你:年龄的价值是什么;
电脑:好的,检查一下我的记忆……我看到年龄在我的参考表:它是空的。基本上,它是nothing/empty,你不能用这个值做任何事情;这是故意的。
现在,我可能不应该这样解释,但希望这是有意义的。
我明白为什么null被设计成JS中的一个对象,我个人也喜欢这样。
Null和undefined实际上意味着同样的事情:空/无。区别在于它在概念上是如何使用的。
我认为null是开发者想要的虚无;一些东西被设为null是为了不代表任何东西。我将未定义视为计算机意图的虚无;开发者/用户无意中发现了一些没有价值的东西。
例如,如果你从库/sdk调用一个函数并返回null,你几乎可以确定这是由开发人员/作者故意设计的;他们特别想表明虚无。
另见- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/null
Null和undefined对于值相等都是false (Null ==undefined):它们都崩溃为布尔值false。它们不是同一个对象(null!==undefined)。
Undefined是全局对象(浏览器中的“window”)的一个属性,但它是一个基本类型,而不是对象本身。它是未初始化的变量和函数的默认值,没有返回语句。
null是Object的一个实例。null用于返回集合对象以指示空结果的DOM方法,该方法提供false值而不指示错误。
思考“null”的最佳方式是回忆一下类似的概念是如何在数据库中使用的,在数据库中它表示字段包含“根本没有值”。
是的,物品的价值是已知的;它是“被定义的”。已经初始化。 该项的值是:“没有值。”
This is a very useful technique for writing programs that are more-easily debugged. An 'undefined' variable might be the result of a bug ... (how would you know?) ... but if the variable contains the value 'null,' you know that "someone, somewhere in this program, set it to 'null.'" Therefore, I suggest that, when you need to get rid of the value of a variable, don't "delete" ... set it to 'null.' The old value will be orphaned and soon will be garbage-collected; the new value is, "there is no value (now)." In both cases, the variable's state is certain: "it obviously, deliberately, got that way."
与未定义相比,null的另一个有趣之处在于它可以递增。 X = undefined x + + Y = null y + + console.log(x) // NaN .log Console.log (y) // 0
这对于为计数器设置默认数值非常有用。你有多少次在声明中把一个变量设为-1 ?