undefined的几个特性

undefined 是window下的一个属性,即使一个原始数据类型,也是一个原始值数据

  1. 不可写

    1
    2
    3
    4
    console.log(window.undefined) //undefined

    window.undefined = 'coderwei'
    console.log(window.undefined) // undefined
  2. 不可配置

    1
    2
    delete window.undefined 
    console.log(window.undefined) //undefined
  3. 不可枚举

    1
    2
    3
    4
    5
    6
    for (const item in window) {
    if (item === undefined) {
    console.log(item); //不会输出
    }
    }
    //补充 既然不可枚举 那我们使用Object.defineProperty定义window下面的undefined 使其变成可枚举的属性,可以嘛? 实际上浏览器会给我抛出异常,告诉我们undefined是不可重新定义

使用场景

  • 当我们定义一个变量为对他进行赋值的时候,浏览器会帮我们给他赋值一个undefined

    1
    2
    let a;
    console.log(a); //undefined
  • 同样的当我们函数定义的形参的时候,如果没有对其赋值,也会打印出undefined

    1
    2
    3
    4
    function test(a) {
    console.log(a); //undefined
    }
    test()
  • undefined在局部作用域下是可以用来作为变量的,意味着undefined并没有作为保留字或者是关键字 即便是严格模式下亦是如此

    1
    2
    3
    4
    5
    6
    7
    8
    let undefined = 'hello word' //全局作用域下定义的undefined 用let会报错 重复声明 用var第二行则输入undefined
    console.log(undefined) //undefined

    function test() {
    let undefined = 'coderwei'
    console.log(undefined); //coderwei
    }
    test()