为什么null是一个对象,null和undefined有什么区别?

为什么null在JavaScript中被认为是一个object

正在检查

if ( object == null )
      Do something

一样

if ( !object )
      Do something

并且:

nullundefined什么区别?


(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意味着一个从未被定义过的变量。 它可能是任何未定义的变量。 但是,名称是任何HTML表单元素的属性。 它回到途中,并在ID之前很好地建立起来。 这很有用,因为ID必须是唯一的,但名称不一定是。


差异可以概括为以下片段:

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

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

检查

object == null与检查if ( !object )

后者等于! Boolean(object) ! Boolean(object) ,因为一元! 操作符自动将右操作数转换为布尔值。

由于Boolean(null)等于false,那么!false === true

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

alert(Boolean(null)) //false
alert(Boolean(0))    //false
alert(Boolean(""))   //false

null不是一个对象,它是一个原始值。 例如,你不能添加属性。 有时人们错误地认为它是一个对象,因为typeof null返回"object" 。 但这实际上是一个错误(甚至可能在ECMAScript 6中修复)。

nullundefined之间的区别如下:

  • undefined :由JavaScript使用,意思是“没有价值”。 未初始化的变量,缺少的参数和未知变量都具有该值。

    > var noValueYet;
    > console.log(noValueYet);
    undefined
    
    > function foo(x) { console.log(x) }
    > foo()
    undefined
    
    > var obj = {};
    > console.log(obj.unknownProperty)
    undefined
    

    然而,访问未知变量会产生一个异常:

    > unknownVariable
    ReferenceError: unknownVariable is not defined
    
  • null :程序员用来指示“无值”,例如作为函数的参数。

  • 检查一个变量:

    console.log(typeof unknownVariable === "undefined"); // true
    
    var foo;
    console.log(typeof foo === "undefined"); // true
    console.log(foo === undefined); // true
    
    var bar = null;
    console.log(bar === null); // true
    

    作为一般规则,您应该始终在JavaScript中使用===且从不== ==(执行可能产生意外结果的各种转换)。 检查x == null是一个边缘案例,因为它适用于nullundefined

    > null == null
    true
    > undefined == null
    true
    

    检查变量是否具有值的常用方法是将其转换为布尔值并查看它是否为true 。 该转换由if语句和布尔运算符执行! (“不”)。

    function foo(param) {
        if (param) {
            // ...
        }
    }
    function foo(param) {
        if (! param) param = "abc";
    }
    function foo(param) {
        // || returns first operand that can't be converted to false
        param = param || "abc";
    }
    

    这种方法的缺点:以下所有值的计算结果均为false ,因此您必须小心谨慎(例如,上述检查无法区分undefined0 )。

  • undefinednull
  • 布尔人: false
  • 数字: +0-0NaN
  • 字符串: ""
  • 您可以使用Boolean作为函数来测试转换为布尔值(通常它是一个构造函数,用于new ):

    > Boolean(null)
    false
    > Boolean("")
    false
    > Boolean(3-3)
    false
    > Boolean({})
    true
    > Boolean([])
    true
    
    链接地址: http://www.djcxy.com/p/2135.html

    上一篇: Why is null an object and what's the difference between null and undefined?

    下一篇: Altering a column: null to not null