Jim*_*dra 94 javascript null undefined
我已经写了很长时间的JavaScript了,我从来没有理由使用它null.似乎undefined总是更可取,并以编程方式提供相同的目的.用什么实际理由null代替undefined?
bbg*_*bbg 81
我真的不知道答案,但根据尼古拉斯C. Zakas,他的书第30页" 专业的JavaScript的Web开发 ":
在定义稍后要保存对象的变量时,建议将变量初始化
null为其他任何变量.这样,您可以显式检查该值,null以确定该变量是否已在以后填充了对象引用
B T*_*B T 42
Null和undefined本质上是两个不同的值,意思是相同的东西.唯一的区别是在约定的你如何使用它们的系统.正如一些人所提到的,有些人使用null表示"无对象",你有时可能会获得一个对象,而未定义意味着没有预期的对象(或者有错误).我的问题是完全随意,完全没必要.
也就是说,有一个主要的区别 - 未初始化的变量(包括没有传递参数的函数参数等)总是未定义的.
这就是为什么在我的代码中我从不使用null,除非我不控制的东西返回null(例如正则表达式匹配).它的美妙之处在于它将事物简化了很多.我永远不必检查x === undefined || x === null.如果你习惯使用==或简单的东西,如if(x).... 停下来.!x将为空字符串,0,null,NaN评估为true - 即您可能不想要的东西.如果你想编写不太糟糕的javascript,请始终使用triple equals ===并且永远不要使用null(使用undefined代替).它会让你的生活更轻松.
Ale*_*lov 12
undefined是没有概念存在的地方; 它没有类型,并且在该范围之前从未被引用过; null是已知存在的东西,但它没有价值.
Rob*_*obG 10
您可以采用此处建议的约定,但实际上没有充分的理由.它的使用不够一致,没有意义.
为了使约定有用,首先必须知道被调用的函数遵循约定.然后,您必须显式测试返回的值并决定要执行的操作.如果未定义,则可以假设被调用函数知道发生了某种错误.但是如果发生错误,并且函数知道它,并且将它发送到更广泛的环境中是有用的,为什么不使用错误对象呢?即抛出错误?
因此,在一天结束时,除了简单环境中的非常小的程序之外,该约定实际上是无用的.
thd*_*oan 10
每个人都有自己的编码方式和他们自己的内部语义,但多年来我发现这是最直观的建议,我给那些提出这个问题的人:当有疑问时,做JavaScript做的事情.
假设您正在处理对象属性,例如jQuery插件的选项......问问自己JavaScript给出了一个尚未定义的属性的价值 - 答案是undefined.所以在这种情况下,我会用'undefined'初始化这些类型的东西,以便与JavaScript保持一致(对于变量,你可以var myVar;代替var myVar = undefined;).
现在让我们说你正在进行DOM操作...... JavaScript为不存在的元素分配了什么价值?答案是null.如果您要创建一个占位符变量,稍后将保存对与DOM相关的元素,文档片段或类似内容的引用,那么这是我将初始化的值.
如果您正在使用JSON,则需要进行特殊情况:对于未定义的属性值,您应该将它们设置为""或者null因为值undefined不被视为正确的JSON格式.
有了这个说法,正如之前的一张海报所表达的那样,如果你发现你在蓝色月亮中使用null或undefined不止一次初始化东西,那么也许你应该重新考虑如何编写你的应用程序.
有些人说可以将对象初始化为null. 我只是想指出解构参数默认值不适用于null. 例如:
const test = ({ name } = {}) => {
console.log(name)
}
test() // logs undefined
test(null) // throws error
Run Code Online (Sandbox Code Playgroud)
这需要在调用函数之前执行null检查,这可能经常发生。
null并undefined要挟相同的值(Boolean(undefined) === false && Boolean(null) === false),你可以在技术上使用要么把工作做好。但是,IMO有正确的方法。将用法的使用留给undefinedJavaScript编译器。
undefined用于描述不指向参考的变量。JS编译器会照顾您。在编译时,JS引擎会将所有提升变量的值设置为undefined。当引擎逐步执行代码并获得值时,引擎会将各自的值分配给各自的变量。对于那些没有为其找到值的变量,这些变量将继续保持对原语的引用undefined。
仅当您明确希望将变量的值表示为“无值”时,才使用null。
如@ com2gz所述:null用于以编程方式定义为空。undefined表示该引用不存在。一个null价值有一个定义的参考,以“无”。如果调用的是对象的不存在属性,则将得到undefined。如果我故意将该属性设为空,则必须为空,null以便您知道它是故意的。
TLDR;不要使用undefined原语。当您声明没有赋值的变量或尝试访问没有引用的对象的属性时,JS编译器会自动为您设置一个值。另一方面,null仅当您有意让变量具有“无值”时,才使用。
我从来没有明确地将任何内容设置为undefined(并且我在与之交互的许多代码库中都没有遇到过)。另外,我很少使用null。我唯一使用的时间null是当我想将函数参数的值表示为没有值时,即:
function printArguments(a,b) {
console.log(a,b);
}
printArguments(null, " hello") // logs: null hello
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28633 次 |
| 最近记录: |