热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在JavaScript中什么时候使用null或未定义?(复制)-WhenisnullorundefinedusedinJavaScript?[duplicate]

Thisquestionalreadyhasananswerhere:这个问题已经有了答案:Whatisthedifferencebetweennull

This question already has an answer here:

这个问题已经有了答案:

  • What is the difference between null and undefined in Javascript? 30 answers
  • 在Javascript中,null和未定义的区别是什么?30的答案

I am really confused as to when Javascript returns null or undefined. Also different browsers seem to be returning these differently.

当Javascript返回null或未定义时,我真的很困惑。同样,不同的浏览器返回这些信息的方式也不同。

Could you please give some examples of null/undefined with the browsers that return them.

你能给我一些返回null/undefined的浏览器的例子吗?

While I am now clear on the undefined aspect, I am still not 100% clear on null. Is it similar to a blank value?

虽然我现在已经清楚了未定义的方面,但我仍然不是100%清楚null。它与空白值相似吗?

E.g. You have a text box which does not have any value set. Now when you try to access its value, will it be null or undefined and are they similar?

例如,你有一个没有任何值集的文本框,现在当你试图访问它的值时,它是null还是undefined,它们相似吗?

6 个解决方案

#1


79  

The DOM methods getElementById(), nextSibling(), childNodes[n], parentNode() and so on return null (defined but having no value) when the call does not return a node object.

DOM方法getElementById()、nextSibling()、childNodes[n]、parentNode()等在调用不返回节点对象时返回null(定义但没有值)。

The property is defined, but the object it refers to does not exist.

属性被定义,但是它引用的对象不存在。

This is one of the few times you may not want to test for equality-

这是少数几次你可能不想测试平等-

if(x!==undefined) will be true for a null value

对于空值,if(x!= undefined)为真

but if(x!= undefined) will be true (only) for values that are not either undefined or null.

但如果(x != undefined)将对非无定义或null的值为true。

#2


118  

I find that some of these answers are vague and complicated, I find the best way to figure out these things for sure is to just open up the console and test it yourself.

我发现其中的一些答案是模糊的和复杂的,我发现确定这些事情的最好方法是打开控制台并自己测试它。

var x;x == null            // truex == undefined       // truex === null           // falsex === undefined      // truevar y = null;y == null            // truey == undefined       // truey === null           // truey === undefined      // falsetypeof x             // 'undefined'typeof y             // 'object'var z = {abc: null};z.abc == null        // truez.abc == undefined   // truez.abc === null       // truez.abc === undefined  // falsez.xyz == null        // truez.xyz == undefined   // truez.xyz === null       // falsez.xyz === undefined  // truenull = 1;            // throws error: invalid left hand assignmentundefined = 1;       // works fine: this can cause some problems

So this is definitely one of the more subtle nuances of Javascript. As you can see, you can override the value of undefined, making it somewhat unreliable compared to null. Using the == operator, you can reliably use null and undefined interchangeably as far as I can tell. However, because of the advantage that null cannot be redefined, I might would use it when using ==.

因此,这绝对是Javascript更微妙的细微差别之一。如您所见,您可以重写undefined的值,使它与null相比有些不可靠。使用==运算符,就我所知,您可以可靠地使用null和undefined作为交换。但是,由于null不能重新定义的优点,我可能在使用==时使用它。

For example, variable != null will ALWAYS return false if variable is equal to either null or undefined, whereas variable != undefined will return false if variable is equal to either null or undefined UNLESS undefined is reassigned beforehand.

例如,如果变量= null或undefined,则变量!= null将返回false,而如果变量= null或undefined则返回false,除非事先重新分配undefined。

You can reliably use the === operator to differentiate between undefined and null, if you need to make sure that a value is actually undefined (rather than null).

如果您需要确保一个值实际上是未定义的(而不是null),您可以可靠地使用=== =运算符来区分未定义和null。

According to the ECMAScript 5 spec:

  • Both Null and Undefined are two of the six built in types.
  • Null和Undefined都是构建在类型中的六个类型中的两个。

4.3.9 undefined value

4.3.9未定义的值

primitive value used when a variable has not been assigned a value

当变量未被赋值时使用的原始值

4.3.11 null value

4.3.11空值

primitive value that represents the intentional absence of any object value

表示有意没有任何对象值的原始值。

#3


49  

You get undefined for the various scenarios:

对于各种场景,你没有定义:

You declare a variable with var but never set it.

使用var声明一个变量,但从不设置它。

var foo; alert(foo); //undefined.

You attempt to access a property on an object you've never set.

您试图访问从未设置的对象上的属性。

var foo = {};alert(foo.bar); //undefined

You attempt to access an argument that was never provided.

您试图访问一个从未提供的参数。

function myFunction (foo) {  alert(foo); //undefined.}

As cwolves pointed out in a comment on another answer, functions that don't return a value.

正如cwolf在另一个答案的评论中指出的,函数不返回值。

function myFunction () {}alert(myFunction());//undefined

A null usually has to be intentionally set on a variable or property (see comments for a case in which it can appear without having been set). In addition a null is of type object and undefined is of type undefined.

通常必须在变量或属性上故意设置null(在没有设置的情况下可以出现,请参阅注释)。另外,一个null类型的对象和未定义的类型是未定义的。

I should also note that null is valid in JSON but undefined is not:

我还要注意,null在JSON中是有效的,但未定义的不是:

JSON.parse(undefined); //syntax errorJSON.parse(null); //null

#4


9  

I might be missing something, but afaik, you get undefined only

我可能漏掉了一些东西,但是,你只能得到不确定的结果

Update: Ok, I missed a lot, trying to complete:

更新:好的,我错过了很多,试图完成:

You get undefined...

你未定义……

... when you try to access properties of an object that don't exist:

…当您试图访问一个不存在的对象的属性时:

var a = {}a.foo // undefined

... when you have declared a variable but not initialized it:

…当您声明了一个变量但没有初始化它时:

var a;// a is undefined

... when you access a parameter for which no value was passed:

…当您访问一个没有传递值的参数时:

function foo (a, b) {    // something}foo(42); // b inside foo is undefined

... when a function does not return a value:

…当一个函数不返回值时:

function foo() {};var a = foo(); // a is undefined

It might be that some built-in functions return null on some error, but if so, then it is documented. null is a concrete value in Javascript, undefined is not.

一些内置函数可能会在某些错误上返回null,但如果是,则会对其进行文档化。null是Javascript中的一个具体值,未定义的则不是。


Normally you don't need to distinguish between those. Depending on the possible values of a variable, it is sufficient to use if(variable) to test whether a value is set or not (both, null and undefined evaluate to false).

通常你不需要区分它们。根据变量的可能值,使用if(变量)来测试是否设置了一个值就足够了(null和undefined evaluate to false)。

Also different browsers seem to be returning these differently.

同样,不同的浏览器返回这些信息的方式也不同。

Please give a concrete example.

请给出一个具体的例子。

#5


3  

Regarding this topic the specification (ecma-262) is quite clear

关于这个主题,规范(ecma-262)非常清楚

I found it really useful and straightforward, so that I share it:- Here you will find Equality algorithm- Here you will find Strict equality algorithm

我发现它非常有用和简单,所以我分享它:-在这里你会发现平等算法-在这里你会发现严格的平等算法。

I bumped into it reading "Abstract equality, strict equality, and same value" from mozilla developer site, section sameness.

我从mozilla开发者网站“相似度”中偶然发现了“抽象的平等、严格的平等和相同的价值”。

I hope you find it useful.

我希望你觉得它有用。

#6


0  

A property, when it has no definition, is undefined. null is an object. It's type is null. undefined is not an object, its type is undefined.

没有定义的属性是未定义的。零是一个对象。它的类型为空。undefined不是对象,它的类型是undefined。

This is a good article explaining the difference and also giving some examples.

这是一篇很好的文章,解释了其中的差异,并给出了一些例子。

null vs undefined

零和未定义的


推荐阅读
  • com.sun.javadoc.PackageDoc.exceptions()方法的使用及代码示例 ... [详细]
  • 在处理木偶评估函数时,我发现可以顺利传递本机对象(如字符串、列表和数字),但每当尝试将JSHandle或ElementHandle作为参数传递时,函数会拒绝接受这些对象。这可能是由于这些句柄对象的特殊性质导致的,建议在使用时进行适当的转换或封装,以确保函数能够正确处理。 ... [详细]
  • 计算机视觉领域介绍 | 自然语言驱动的跨模态行人重识别前沿技术综述(上篇)
    本文介绍了计算机视觉领域的最新进展,特别是自然语言驱动的跨模态行人重识别技术。上篇内容详细探讨了该领域的基础理论、关键技术及当前的研究热点,为读者提供了全面的概述。 ... [详细]
  • 本文总结了JavaScript的核心知识点和实用技巧,涵盖了变量声明、DOM操作、事件处理等重要方面。例如,通过`event.srcElement`获取触发事件的元素,并使用`alert`显示其HTML结构;利用`innerText`和`innerHTML`属性分别设置和获取文本内容及HTML内容。此外,还介绍了如何在表单中动态生成和操作``元素,以便更好地处理用户输入。这些技巧对于提升前端开发效率和代码质量具有重要意义。 ... [详细]
  • 本次发布的Qt音乐播放器2.0版本在用户界面方面进行了细致优化,提升了整体的视觉效果和用户体验。尽管核心功能与1.0版本保持一致,但界面的改进使得操作更加直观便捷,为用户带来了更为流畅的使用体验。此外,我们还对部分细节进行了微调,以确保软件的稳定性和性能得到进一步提升。 ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • 本文介绍了如何在 Vue 3 组合 API 中正确设置 setup() 函数的 TypeScript 类型,以避免隐式 any 类型的问题。 ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • 【问题】在Android开发中,当为EditText添加TextWatcher并实现onTextChanged方法时,会遇到一个问题:即使只对EditText进行一次修改(例如使用删除键删除一个字符),该方法也会被频繁触发。这不仅影响性能,还可能导致逻辑错误。本文将探讨这一问题的原因,并提供有效的解决方案,包括使用Handler或计时器来限制方法的调用频率,以及通过自定义TextWatcher来优化事件处理,从而提高应用的稳定性和用户体验。 ... [详细]
  • 本文探讨了如何利用 jQuery 的 JSONP 技术实现跨域调用外部 Web 服务。通过详细解析 JSONP 的工作原理及其在 jQuery 中的应用,本文提供了实用的代码示例和最佳实践,帮助开发者解决跨域请求中的常见问题。 ... [详细]
  • 尽管我们尽最大努力,任何软件开发过程中都难免会出现缺陷。为了更有效地提升对支持部门的协助与支撑,本文探讨了多种策略和最佳实践,旨在通过改进沟通、增强培训和支持流程来减少这些缺陷的影响,并提高整体服务质量和客户满意度。 ... [详细]
  • JavaScript XML操作实用工具类:XmlUtilsJS技巧与应用 ... [详细]
  • 在前文探讨了Spring如何为特定的bean选择合适的通知器后,本文将进一步深入分析Spring AOP框架中代理对象的生成机制。具体而言,我们将详细解析如何通过代理技术将通知器(Advisor)中包含的通知(Advice)应用到目标bean上,以实现切面编程的核心功能。 ... [详细]
  • 本文介绍了UUID(通用唯一标识符)的概念及其在JavaScript中生成Java兼容UUID的代码实现与优化技巧。UUID是一个128位的唯一标识符,广泛应用于分布式系统中以确保唯一性。文章详细探讨了如何利用JavaScript生成符合Java标准的UUID,并提供了多种优化方法,以提高生成效率和兼容性。 ... [详细]
  • 本文探讨了如何在 Google Sheets 中通过自定义函数实现 AJAX 调用。具体介绍了编写脚本的方法,以便在电子表格中发起 AJAX 请求,从而实现数据的动态获取与更新。这种方法不仅简化了数据处理流程,还提高了工作效率。 ... [详细]
author-avatar
孽尐星_186
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有