GVKun编程网logo

为什么null为对象,并且null和undefined有什么区别?(null和undefined为什么相等)

16

如果您对为什么null为对象,并且null和undefined有什么区别?感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于为什么null为对象,并且null和undefine

如果您对为什么null为对象,并且null和undefined有什么区别?感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于为什么null为对象,并且null和undefined有什么区别?的详细内容,我们还将为您解答null和undefined为什么相等的相关问题,并且为您提供关于Haskell中的undefined和Java中的null有什么区别?、javascript – 为什么DOMWindow类型为null和undefined?、javascript – 为什么null == undefined计算结果为true?、JavaScript 中 null、undefined 有什么区别?的有价值信息。

本文目录一览:

为什么null为对象,并且null和undefined有什么区别?(null和undefined为什么相等)

为什么null为对象,并且null和undefined有什么区别?(null和undefined为什么相等)

问题:

Why is null considered an object in JavaScript? 为什么在JavaScript中将null视为object

Is checking 正在检查

if ( object == null )
      Do something

the same as 与...相同

if ( !object )
      Do something

?

And also: 并且:

What is the difference between null and undefined ? nullundefined什么区别?


解决方案:

参考一: https://stackoom.com/question/3MNs/为什么null为对象-并且null和undefined有什么区别
参考二: https://oldbug.net/q/3MNs/Why-is-null-an-object-and-what-s-the-difference-between-null-and-undefined

Haskell中的undefined和Java中的null有什么区别?

Haskell中的undefined和Java中的null有什么区别?

两者都是其类型是所有类型(无人居住)的交集的术语。两者都可以在代码中传递,而不会失败,直到尝试对其进行评估。我能看到的唯一区别是,在Java中,存在一个漏洞,可以null对一个操作进行精确的评估,即引用相等比较(==),而在Haskell
undefined中,如果不抛出异常就无法进行评估。这是唯一的区别吗?

编辑

我真正想解决的问题是,为什么null在Java 中包含如此明显的错误决定,Haskell如何逃避呢?在我看来,真正的问题是,你可以做一些 有用的
null,即你可以检查它的 NULL的含量
。因为您可以执行此操作,所以在代码中传递空值并使其指示“无结果”而不是“此程序中存在逻辑错误”已成为标准惯例。而在Haskell中,无法检查一个术语是否在没有评估且程序爆炸的情况下达到最低值,因此永远不能将其用于表示“无结果”。相反,人们被迫使用Maybe

抱歉,如果我对“评价”一词玩得太紧了……我想在此处进行类比,而很难准确地表述它。我想这表明类推是不精确的。

答案1

小编典典

Haskell中的undefined和Java中的null有什么区别?

好吧,让我们备份一下。

Haskell中的“未定义”是“底”值(表示为⊥)的示例。这样的值表示程序中任何未定义,卡住或部分状态。

存在许多不同形式的底部:非终止循环,异常,模式匹配失败-基本上是程序中某种程度上未定义的状态。该值undefined ::a是将程序置于未定义状态的值的典型示例。

undefined本身并不是特别特殊-它没有连接-
您可以undefined使用任何底线表达式来实现Haskell的。例如,这是有效的实现undefined

 > undefined = undefined

或立即退出(旧的Gofer编译器使用此定义):

 > undefined | False = undefined

bottom的主要属性是,如果表达式的计算结果为bottom,则整个程序的计算结果将为bottom:该程序处于未定义状态。

为什么要这样的价值?好吧,用一种惰性语言,您通常可以操纵存储最低值的结构或函数,而无需使程序本身成为最低值。

例如,无限循环列表是非常复杂的:

 > let xs = [ let f = f in f             , let g n = g (n+1) in g 0            ] > :t xs xs :: [t] > length xs 2

我只是不能对列表中的元素做很多事情:

 > head xs ^CInterrupted.

这种对无限内容的操纵是为什么Haskell如此有趣且富有表现力的原因之一。懒惰的结果是,Haskell特别重视bottom价值观。

但是,很明显,底部的概念同样适用于Java或任何(非全部)语言。在Java中,有许多表达式可以产生“底”值:

  • 将引用与null进行比较(不过请注意,不是注释null本身,定义明确);
  • 被零除;
  • 越界例外;
  • 无限循环等

您只是没有能力很轻松地将一个底部替换为另一个底部,并且Java编译器并没有为底部值做很多推理。但是,存在这些值。

综上所述,

  • null在Java中取消引用值是一个特定的表达式,在Java中产生一个底值;
  • undefinedHaskell中的值是一个通用的底部收益表达式,可以在Haskell中需要底部值的任何地方使用。

那就是他们的相似之处。

后记

关于null自身的问题:为什么它被认为是不良形式?

  • 首先,Java null本质上等效于 向 Haskell中的Maybe a每个类型添加隐式a
  • null仅在以下Just情况下,解引用等效于模式匹配:f (Just a) = ... a ...

因此,当传入的值是Nothing(在Haskell中)或null(在Java中)时,您的程序将达到未定义状态。这很糟糕:程序崩溃。

因此,通过添加null每种 类型中,您已经使bottom偶然创建值变得更加容易-
类型不再对您有帮助。您的语言已不再帮助您防止这种特定类型的错误,这很糟糕。

当然,其他最低值仍然存在:异常(如undefined)或无限循环。向每个函数添加新的可能的故障模式-
取消引用null-只会使编写崩溃程序变得更加容易。

javascript – 为什么DOMWindow类型为null和undefined?

javascript – 为什么DOMWindow类型为null和undefined?

当您在浏览器或Node.js中运行以下代码时,您将获得注释中列出的预期结果:
Object.prototype.toString.call(undefined); // "[object Undefined]"
Object.prototype.toString.call(null); // "[object Null]"

但是,在PhantomJS中运行该代码时,在这两种情况下,输出都是[object DOMWindow].

这似乎很奇怪,因为未定义和null都是本机类型. typeof操作符似乎像在其他环境(包括类型为null ===“对象”quirk)中一样工作,因此,看起来PhantomJS至少具有未定义类型的概念:

typeof undefined; // "undefined"

它还声称Object.prototype.toString包含本机代码,这可能表示Phantom本身没有做任何修改实现(我不知道是否是这种情况或者不是 – 我还没有找到任何有用的源):

Object.prototype.toString.toString(); // "function toString() { [native code] }"

那么为什么PhantomJS不使用(或至少暴露)正确的[[Class]]属性值为null和undefined,有没有办法我改变?我知道我可以使用一种不同的方法来确定类型,但是我宁可不用.

解决方法

它是两件事的结合.脚本在网页内执行,因此全局对象是窗口对象,如下所示:
console.log(this.toString()); // [object DOMWindow]

此外,在上述条件下,该版本的JavaScript实现会导致对象原型链的伪造.

这在将来的版本中可能会被修复.

javascript – 为什么null == undefined计算结果为true?

javascript – 为什么null == undefined计算结果为true?

我有一个代码,我不清楚

var a = null; 
if(a==undefined)
alert("true");
else 
alert("false");

当我在上面运行代码时,它会发出警告.

任何人都能解释一下这背后的原因或概念吗?

解决方法

这是真的,因为==是松散的等式运算符,而null和undefined松散相等(null == undefined为true).如果使用严格相等运算符===,则它们不相等(null === undefined为false).

基本上,松散的等式运算符会强制其操作数,如果它们的类型不同(参见规范中的Abtract Equality Comparison).例如,0 ==“”为真,因为如果你强制“”到一个数字,它就是0.严格相等运算符认为不同类型的操作数不相等(见Strict Equality Comparison);它没有强迫.

JavaScript 中 null、undefined 有什么区别?

JavaScript 中 null、undefined 有什么区别?

  • 赋值:null 表示定义了但未赋值,undefined 表示未定义
  • 数据转换:null 在做数值转换时会被转换为 0,undefined 会被转换为 NaN


来一道刷了进 BAT 的面试题?
 

我们今天的关于为什么null为对象,并且null和undefined有什么区别?null和undefined为什么相等的分享就到这里,谢谢您的阅读,如果想了解更多关于Haskell中的undefined和Java中的null有什么区别?、javascript – 为什么DOMWindow类型为null和undefined?、javascript – 为什么null == undefined计算结果为true?、JavaScript 中 null、undefined 有什么区别?的相关信息,可以在本站进行搜索。

本文标签: