Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript null如何表示“空”;“没有价值”;而任何';定义的s在内存中具有0或1转储值?_Javascript - Fatal编程技术网

Javascript null如何表示“空”;“没有价值”;而任何';定义的s在内存中具有0或1转储值?

Javascript null如何表示“空”;“没有价值”;而任何';定义的s在内存中具有0或1转储值?,javascript,Javascript,试图理解JavaScript中null和undefined之间的区别,我在提到的地方找到了答案 null是一个赋值。它可以指定给变量,作为无值的表示 问题是,一旦定义了如下变量: var someVariable = null; someVariable不是在内存中的某个位置定义的吗?那么它不应该已经有了随机的0和1,除非另外指定了特定的值吗? 在位级别上,null代表什么?它是指0或1的空位吗 首先,在JS中编程时,当您声明一个变量时,您不应该担心内存中到底保存了什么。它是一种具有自动内存管

试图理解JavaScript中
null
undefined
之间的区别,我在提到的地方找到了答案

null
是一个赋值。它可以指定给变量,作为无值的表示

问题是,一旦定义了如下变量:

var someVariable = null;
someVariable
不是在内存中的某个位置定义的吗?那么它不应该已经有了随机的0和1,除非另外指定了特定的值吗?
在位级别上,
null
代表什么?它是指0或1的空位吗

首先,在JS中编程时,当您声明一个变量时,您不应该担心内存中到底保存了什么。它是一种具有自动内存管理(包括垃圾收集)功能的高级语言,不像C语言那样,我相信如果您愿意,您可以处理实际内存。(注意,我从来没有用C或类似的低级语言编写过程序,所以我对该语言的任何说法都不应该一概而论。)JS变量只是一种抽象,您可以使用一个名称作为特定值的“容器”(它可以随时间变化,因此称为“变量”)

至于为什么JS在
null
undefined
中有两个“nothing”值,这是一个非常好的问题,可能只是语言的一个怪癖
undefined
是“无值”的最佳表示,因为它是声明的变量在被赋予另一个值之前将保持的值,是您刚刚输入
return的函数的默认返回值
或关闭
return
语句,以及自动分配给函数签名中但调用时未传入的任何函数参数的值


至于
null
,我不确定它为什么需要存在——但它从一开始就存在了。大体上按照惯例,它往往被某些库的开发人员使用,在某些地方,对象是预期的,但实际上并不存在。(尽管事实上,正如我在另一个答案上所评论的,
null本身并不是一个对象值。)例如,MDN强调了这个用法:

你似乎被回答“null
不是一个值”或者它意味着“一个没有值的变量”弄糊涂了。这是错误的,它不是这么说的

null
值在JS语言中是一个非常重要的值。它是一个基本值,就像
undefined
true
NaN
0
42

您引用的答案是,此值可以表示应用程序域中的“无值”。将值
null
放在那里意味着它没有其他值,例如“既非真也非假”

(无论我们看到的是哪个JS值,我们都不关心它在内存中的位级表示,比如哪个位可以准确区分字符串和整数。它们只是我们可以在程序中使用的值,没有其他值。

事实上,JS中的
let
变量确实可以有一个未初始化的状态,但这并不意味着我们可以读回一个随机位模式,而是一个显式的状态,它会导致程序在计算变量时抛出一个异常。
var
变量总是被初始化,并且
未初始化创建作用域时,输入值会有所不同。

特定值在内存中的确切位置会因使用的JavaScript引擎而异(例如,Chrome中的V8、Firefox中的SpiderMonkey等)。JS是一种高级语言,不关心内存中哪个位置的位
null
只是另一个基本值,如
NaN
0
27
“它不应该有随机的0和1吗”-不,它不应该。它应该有一个确定的值(即
未定义的
或“抛出一个引用错误”)。我们不希望它有一个任意的(或多或少是随机的)位模式来代表我们程序中的实际值。JS的类型不仅仅是字节,而且指向内存中任意位置的对象引用可能会造成相当大的破坏。