黄子涵

3.7 undefined型

// undefined 型只能够取 undefined 这一个值。
console.log("对undefined值进行typeof运算,其结果为undefined:");
console.log(typeof undefined);
// 从代码上来看,undefined 值似乎和 null 值一样都是一种字面量。
// 但实际上,它并非字面量,而是一个预定义的全局变量
console.log("对名称为 undefined 的全局变量进行赋值:");
undefined = '黄子涵'
console.log(undefined);
console.log("判断undefined的数据类型:");
console.log(typeof undefined);

image

undefined 值

全局变量 undefined 与 undefined 值的关系其实就是这样的:首先有了 undefined 型的值,之后才将该值赋值给了全局变量 undefined。

null 是一种字面量而 undefined 是一个变量名,这并不是一种偶然。要使一个变量的值为 null,就必须将 null 以字面量的形式赋值给该变量。因此从语言规则的角度来说,null 必须是一种字面量。另一方面,undefined 值最多只能算是某个没有经过显式赋值的变量的初始值。所以根据字面含义,将其称为未定义值或是未初始化值都没有问题。

console.log("只是被声明了的变量:");
var hzh1;
console.log("该变量的值为undefined值:");
console.log(typeof hzh1);

image

也就是说,从语法规则上来看,undefined 这一标识符并不是必需的。这是因为只需将全局变量undefined 赋值给没有被赋值的变量就可以了。null 值指的是没有引用任何对象的状态,尽管从含义上来看是否定的,但仍然是有其含义的。而 undefined 值则不同,像它的字面意思那样,仅仅指的是一个尚未定义的值。

对于 undefined 值来说,并不存在与之相对应的 Undefined 类。因此如果像下面这样对 undefined 值进行点运算,将会产生 TypeError 异常。

会出现 undefined 值的情况

  • 未初始化的变量的值
  • 不存在的属性的值
  • 在没有传入实参而调用函数时,该函数内相应参数的值
  • 没有 return 语句或是 return 语句中不含表达式的函数的返回值
  • 对 void 运算符求值的结果(常常会通过使用 void 0 来获取一个 undefined 值)

null 值可能会引起程序出错,而 undefined 值比它更容易引发错误。令情况更为混乱的是,如果对 null 值和 undefined 值做进行数据类型转换的等值运算(==),结果为真。此外,对于不进行数据类型转换的等值运算(===),其结果则为假。

undefined 值是一种有着非常高的潜在出错风险的语言特性,所以在使用 undefined 值时请多加留心。

posted @ 2022-05-26 09:04  黄子涵  阅读(41)  评论(0编辑  收藏  举报