你真的了解undefined吗?

undefined既是一个基本数据类型也是一个原始值数据

  • 系统会给一个未赋值的变量赋值为undefined,返回的类型也是undefined
var a;
console.log(a); // 值undefined
console.log(typeof a);  // 类型undefined
  • 调用一个有参数的函数但是不传参,这个参数也是undefined
function test(a){
    console.log(a); // 值undefined
    console.log(typeof a); //  类型undefined
    return a // // 值undefined
}
console.log(test());
  • 函数内部没有显式return东西时,系统默认返回undefined
function test(){
    var a = 9
}
console.log(test()); // undefined

undefined还是全局window上的一个属性

window.undefined.png
  • 这个属性是只读的,不可配置,不可枚举
console.log(window.undefined); // undefined
            
window.undefined = '123'
console.log(window.undefined);
            
for (let k in window) {
  if(k === undefined){
    console.log("访问到了");
   }
 }



undefined.png
  • 不可重新定义
Object.defineProperty(window, "undefined", {
    enumerable: true,
    writable: true,
    configurable: true
})
//直接报错
 Uncaught TypeError: Cannot redefine property: undefined
    at Function.defineProperty (<anonymous>)
    at test.html:9

undefined可以做变量名吗??

  • 全局作用域下
var undefined = 1
console.log(undefined); // undefined
console.log(window.undefined); // undefined
  • 局部作用域下
function test(){
    var undefined = 1
    console.log(undefined); // 1
}
test()

undefined在局部作用域可以作为变量,undefined不是关键字也不是保留字,上面也说了在全局下,undefined是只读的,所以在局部作用域中就可以使用,严格模式下仍然可以。但是开发中还是避免使用它做变量名

判断类型

如果要判断某个变量是否是undefined,必须使用“===”而不能使用“==”

var a;
if(a === undefined){
  console.log("执行了"); // 可以执行
  }

var b;
if(a == undefined){
  console.log("执行了"); // 可以执行
  }

为的就是与null进行区分,当a = null时,a == undefined返回的结果就是true

var a = null;
if(a == undefined){
  console.log("执行了");
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • JavaScript 用法 HTML 中的脚本必须位于 与 标签之间。脚本可被放置在 HTML 页面的 ...
    蜂子fightting阅读 853评论 0 0
  • 函数和对象 1、函数 1.1 函数概述 函数对于任何一门语言来说都是核心的概念。通过函数可以封装任意多条语句,而且...
    道无虚阅读 4,635评论 0 5
  • JavaScript,通常缩写为 JS,是一种解释执行的编程语言。它是现在最流行的脚本语言之一。 JavaScri...
    神齐阅读 4,963评论 1 32
  • let和const let和const作为es6新增的关键字,和var类似用来声明变量。 区别: var定义变量,...
    不成KickFlip不改名阅读 314评论 0 0
  • JavaScript简介 JavaScript(简称“JS”) 是一种具有函数优先的轻量级,解释型或即时编译型的编...
    Joel_zh阅读 214评论 0 0