美文网首页
js中null和undefined的区别

js中null和undefined的区别

作者: 饱饱想要灵感 | 来源:发表于2023-08-13 20:16 被阅读0次

    概述

    在JavaScript中,null和undefined是两个特殊的值,表示缺少值或未定义的值。

    • undefined是一个特殊的值,表示一个变量没有被赋值或者一个对象的属性不存在。当声明一个变量但未给它赋值时,它的默认值就是undefined。同样地,访问一个对象的未定义的属性时,返回的值也是undefined。
    • null则表示一个空值或者一个“不存在的”对象。它是一个被人为赋予的值,表示变量的期望值是不存在的。null是一个原始值,表示一个空的、无效的或者未知的对象。当我们需要明确地表示一个变量为空时,可以将其赋值为null。

    原型链的尽头是null。null没有任何属性和方法,也没有自己的原型

    Object.getPrototypeOf(Object.prototype) // null
    Object.getPrototypeOf(null) // Uncaught TypeError: Cannot convert undefined or null to object
        at Function.getPrototypeOf (<anonymous>)
        at <anonymous>:1:8
    

    一、相同点

    1、都是js的基本数据类型,一般将它们看成两个特殊值

    2、将一个变量赋值为undefined或null,语法效果几乎没区别

    3、在if语句中,都会被自动转为false,另外,数字0在if中也表示否

    4、严格相等运算符(===):undefined和null 只与自身严格相等, undefined === null返回false

    相等运算符(==):undefined和null 与自身比较,或者互相比较时,会返回true;

    与其他类型的值比较时,结果都为false

    // 严格相等运算符 ===
    null === null // true
    undefined === undefined // true
    null === undefined // false
    
    // 相等运算符 ==
    null == null // true
    undefined == undefined // true
    null == undefined // true
    
    false == null // false
    false == undefined // false
    
    0 == null // false
    0 == undefined // false
    

    5、 null和undefined都无法转成对象

    // 如果参数为空(或者为undefined和null),Object()返回一个空对象。
    var obj = Object();
    // 等同于
    var obj = Object(undefined);
    var obj = Object(null);
    
    obj instanceof Object // true
    

    二、不同点

    1、定义

    null是js的关键字,表示空值;

    undefined不是js的关键字,它是一个全局变量

    2、转化为数字时

    null是一个表示“空”的对象,转为数值时为0
    undefined是一个表示"此处无定义"的原始值,转为数值时为NaN

    Number(null) // 0
    5 + null // 5
    
    Number(undefined) // NaN
    5 + undefined // NaN
    
    3、转化为字符串时

    undefined:转为字符串'undefined'
    null:转为字符串'null'

    String(null) // 'null'
    '5' + null // '5null'
    
    String(undefined) // 'undefined'
    '5' + undefined // '5undefined'
    
    4、typeof
    typeof null  // 'object'
    typeof undefined  // 'undefined'
    
    5、Object.prototype.toString.call()
    Object.prototype.toString.call(null) // '[object Null]'
    Object.prototype.toString.call(undefined) // '[object Undefined]'
    
    6、JSON转化时

    JSON 对象的值可以是null,不能使用undefined

    JSON.parse('{"a":null}') // {a: null}
    
    // 报错
    JSON.parse('{"a":undefined}')  // Uncaught SyntaxError: Unexpected token 'u', "{"a":undefined}" is not valid JSON
        at JSON.parse (<anonymous>)
        at <anonymous>:1:6
    

    如果对象的属性是undefined,该属性会被JSON.stringify()跳过

    JSON.stringify({a: null}) // '{"a":null}'
    JSON.stringify({a: undefined}) // '{}'
    

    如果数组的成员是undefined,该成员会被JSON.stringify()跳过

    JSON.stringify([null, undefined]) // '[null]'
    

    三、返回undefined的典型场景

    // 变量声明了,但没有赋值
    var i;
    i // undefined
    
    // 调用函数时,应该提供的参数没有提供,该参数等于 undefined
    function f(x) {
      return x;
    }
    f() // undefined
    
    // 对象没有赋值的属性
    var o = new Object();
    o.p // undefined
    
    // 函数没有返回值时,默认返回 undefined
    function f() {}
    f() // undefined
    
    // void运算符不返回任何值,或者说返回undefined
    void 0 // undefined
    
    // 严格模式的函数体内部this是undefined,而不是window
    function f() {
      'use strict';
      console.log(this === undefined);
    }
    f() // true
    

    相关文章

      网友评论

          本文标题:js中null和undefined的区别

          本文链接:https://www.haomeiwen.com/subject/dhkqmdtx.html