为什么null为对象,并且null和undefined有什么区别?

JavaScript

梅Near米亚

2020-03-10

为什么在JavaScript中null视为object

正在检查

if ( object == null )
      Do something

与...相同

if ( !object )
      Do something

并且:

null之间有什么区别undefined

第426篇《为什么null为对象,并且null和undefined有什么区别?》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

16个回答
小卤蛋 2020.03.10
  1. 未定义表示已声明变量,但尚未分配任何值,而可以将Null分配给表示“无值”的变量。(Null是赋值运算符)

2. Undefined是类型本身,而Null是对象。

3 Javascript本身可以将任何未分​​配的变量初始化为undefined,但永远不能将变量的值设置为null。这必须以编程方式完成。

米亚小小神乐 2020.03.10

考虑“空”的最好方法是回忆一下数据库中类似概念的用法,它表示一个字段根本不包含任何值。

  • 是的,该物品的价值是已知的; “定义的”。被初始化。
  • 该项目的值是:“没有值”。

这对于编写更易于调试的程序是非常有用的技术。“未定义”变量可能是错误的结果…… (您怎么知道?) ……但是,如果变量包含值“ null”,则您会知道“有人在该程序的某个位置,将其设置为因此,我建议,当您需要删除变量的值时,请不要“删除”……将其设置为“ null”。旧值将被孤立,不久将被垃圾回收;新值是“没有值(现在)”。在这两种情况下,变量的状态都是确定的:“显然,它是故意那样做的。”

小宇宙猪猪乐 2020.03.10

Javascript null中,不是object类型,而是primitave类型。

有什么区别? 未定义是指尚未设置的指针。 是指空指针,例如,某些东西已手动将变量设置为类型null

古一NearEva 2020.03.10

与undefined相比,null的另一个有趣之处在于它可以递增。

x = undefined
x++
y = null
y++
console.log(x) // NaN
console.log(y) // 0

这对于设置计数器的默认数值很有用。您在变量声明中将变量设置为-1多少次?

JinJin神奇宝儿 2020.03.10

例如window.someWeirdProperty是未定义的,所以

"window.someWeirdProperty === null" 评估为false

"window.someWeirdProperty === undefined" 评估为true。

此外checkif if (!o)是不一样的检查if (o == null)ofalse

宝儿理查德 2020.03.10

以下功能说明了原因并能够解决差异:

function test() {
        var myObj = {};
        console.log(myObj.myProperty);
        myObj.myProperty = null;
        console.log(myObj.myProperty);
}

如果你打电话

test();

你正在

未定义

空值

第一个console.log(...)尝试myPropertymyObj尚未定义的位置获取数据-因此它返回“未定义”状态。在为它分配了null之后,第二个console.log(...)返回值显然是“ null”,因为myProperty它存在,但已为其null分配了值

为了能够查询这种差异,JavaScript具有nullundefined:尽管null是-与其他语言一样,对象undefined也不能是对象,因为没有可用的实例(甚至不是null实例)。

L路易 2020.03.10

一些精度:

null和undefined 两个不同的值。一个代表缺少名称的值,另一个代表缺少名称。


发生if以下情况if( o )

对括号o中的表达式进行求值,然后if对括号中的表达式的值进行类型强制-在本例中o

JavaScript中的Falsy(将被强制转换为false)的值为:”,null,undefined,0和false

GO蛋蛋 2020.03.10

null是一个对象。其类型为null。undefined不是对象 其类型未定义。

用户7049302300 2020.03.10

要添加到的答案之间有什么differrence undefinednull,从JavaScript的权威指南第6版,在此页第41页

您可能会考虑undefined表示系统级别的,意外的或类似错误的值null缺失,表示程序级别的,正常的或预期的值缺失。如果您需要将这些值之一分配给变量或属性,或者将这些值之一传递给函数,null则几乎总是正确的选择。

路易Gil 2020.03.10

JavaScript中许多不同的空检查的比较:

http://jsfiddle.net/aaronhoffman/DdRHB/5/

// Variables to test
var myNull = null;
var myObject = {};
var myStringEmpty = "";
var myStringWhiteSpace = " ";
var myStringHello = "hello";
var myIntZero = 0;
var myIntOne = 1;
var myBoolTrue = true;
var myBoolFalse = false;
var myUndefined;

...trim...

http://aaron-hoffman.blogspot.com/2013/04/javascript-null-checking-undefined-and.html

JavaScript空检查比较表

凯卡卡西 2020.03.10

对于值相等,null和undefined均为false(null == undefined):它们都折叠为布尔值false。它们不是同一对象(null!== undefined)。

undefined是全局对象的属性(浏览器中为“窗口”),但它是原始类型,而不是对象本身。这是未初始化的变量和函数的默认值,这些变量和函数以没有return语句的形式结束。

null是Object的实例。对于用于返回集合对象以指示空结果的DOM方法,将使用null,该方法提供错误值而未指示错误。

Pro路易 2020.03.10

理解null和undefined的一种方法是了解每种情况的发生位置。

在以下情况下,期望返回空值:

  • 查询DOM的方法

    console.log(window.document.getElementById("nonExistentElement"));
    //Prints: null
    
  • 从Ajax请求收到的JSON响应


    {
      name: "Bob",
      address: null
    }
  • RegEx.exec

  • 不断变化的新功能。以下返回null:


        var proto = Object.getPrototypeOf(Object.getPrototypeOf({}));

       // But this returns undefined:

        Object.getOwnPropertyDescriptor({}, "a");

所有其他不存在的情况都由undefined表示(如@Axel所示)。以下每个打印“未定义”:

    var uninitalised;
    console.log(uninitalised);

    var obj = {};
    console.log(obj.nonExistent);

    function missingParam(missing){
        console.log(missing);
    }

    missingParam();

    var arr = [];
    console.log(arr.pop());        

当然,如果您决定编写var unitialized = null; 或自己从方法返回null,则在其他情况下会出现null。但这应该很明显。

第三种情况是您要访问变量,但您甚至不知道它是否已声明。对于这种情况,请使用typeof以避免引用错误:

if(typeof unknown !== "undefined"){
    //use unknown
}

总而言之,在处理DOM,处理Ajax或使用某些ECMAScript 5功能时,请检查是否为null。对于所有其他情况,可以使用严格的相等性检查undefined是安全的:

if(value === undefined){
  // stuff
}
梅十三 2020.03.10

差异可以概括为以下代码段:

alert(typeof(null));      // object
alert(typeof(undefined)); // undefined

alert(null !== undefined) //true
alert(null == undefined)  //true

检查

object == null检查是不同的if ( !object )

后者等于! Boolean(object),因为一元运算!符会自动将正确的操作数转换为布尔值。

既然Boolean(null)等于假,那么!false === true

因此,如果您的对象不是null而是 false0“”,则检查将通过,因为:

alert(Boolean(null)) //false
alert(Boolean(0))    //false
alert(Boolean(""))   //false
番长十三 2020.03.10

null和undefined有什么区别?

没有定义的属性未定义。null是一个对象。它的类型是对象。null是一个特殊值,表示“无值。undefined不是对象,类型是undefined。

您可以声明一个变量,将其设置为null,其行为是相同的,除了看到的是“ null”和“ undefined”。您甚至可以将未定义的变量与null进行比较,反之亦然,条件将为true:

 undefined == null
 null == undefined

有关更多详细信息,请参见JavaScript null与undefined之间的区别

和您的新编辑

if (object == null)  does mean the same  if(!object)

在测试object是否为false时,它们都仅在测试false时满足条件,而在true时不满足

在这里检查:Javascript陷阱

梅A飞云 2020.03.10
var x = null;

x定义为null

y未定义;//因为我没有定义它

if (!x)

null被评估为false

伽罗猪猪理查德 2020.03.10
(name is undefined)

您:什么name(*)
的JavaScript: name什么name我不知道你在说什么 您以前从未提到name过。您是否在(客户端)看到其他脚本语言?

name = null;

您:什么name
JavaScript:我不知道。

简而言之; undefined没有事物的概念存在的地方;它没有类型,并且在该范围内从未被引用过;null是已知事物存在的地方,但价值不明。

有一点要记住的是,null不是,概念,同为false""或这样,即使它们的类型转换,即在画上等号

name = false;

您:什么name
JavaScript:布尔值false。

name = '';

您:什么name
JavaScript:空字符串


*:name在此上下文中是指从未定义的变量。它可以是任何未定义的变量,但是name是几乎任何HTML表单元素的属性。它沿路前进,早在id之前就已建立。这很有用,因为id必须是唯一的,但名称不必是唯一的。

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android