undefined、null

变量:

在应用程序中,使用变量来作为值的符号名。变量的名字又叫做标识符。

变量求值:

用 var 或 let 语句声明的变量,如果没有赋初始值,则其值为 undefined。此时的undefined是“值”。

var x; //创建一个变量,但并没有赋值
console.log("X的值是", x)  //返回X的值是undefined

数据类型(7+1种):
下表左边是数据类型,右边是该数据类型对应的数据的值。(有点拗口),想要强调的是此处的undefined与null,既表示数据类型,又表示值。

  1. undefined:只有一个值:undefined
  2. null: 只有一个值:null
  3. Number:整数或浮点数
  4. String:一串表示文本值的字符序列
  5. Boolean:值是 true / false
  6. BigInt:可以安全地存储和操作大整数,甚至可以超过数字的安全整数限制。
  7. Symbol:实例是唯一且不可改变的数据类型
  8. Object

undefined与null区别
undefined:定义未赋值
null:定义值为null

什么时候用null:

  1. 初始赋值,表明即将赋值为对象
  2. 结束前让对象成为垃圾对象(被垃圾回收器回收)

判断数据类型的方式

typeof

  1. 返回数据类型的字符串表达,且都是小写形式。
  2. 可以区别:数值、字符串、布尔值、undefined、function;
  3. 不能区别:null与object、一般object与array。
  4. 重点:typeof null => ‘object’, typeof function(){} => 'function’

instanceof

  1. 专门用来判断对象数据的类型:Object、Array与Function。

===(因为数据类型null、undefined只有一个值)

  1. 可以判断:undefined和null。

js的标准内置对象

标准内置对象即全局对象,即处在全局作用域里的多个对象,这些对象的属性和方法即为全局属性和全局函数。

标准内置对象分类:

  • 值属性(这些全局属性返回一个简单值,这些值没有自己的属性和方法。)
    undefined(划重点!undefined是全局属性)
    – Infinity
    – NaN
    – globalThis
  • 函数属性(全局函数可以直接调用,不需要在调用时指定所属对象,执行结束后会将结果直接返回给调用者。)
    – parseInt()
    – eval()
    – …
  • 基本对象(基本对象是定义或使用其他对象的基础。基本对象包括一般对象、函数对象和错误对象。)
    – 一般对象(Object、Function、Boolean、Symbol)
    – 错误对象(Error、ReferenceError、TypeError…)
    – 数字和日期对象(Math、Date、Number…)
    – …

全局属性包括undefined,但是没有null!!! 全局属性undefined只会返回一个简单值undefined,返回的简单值undefined的数据类型是基本数据类型undefined。

全局属性undefined 的属性特性:
writablefalse
enumerablefalse
configurablefalse

全局属性undefined的属性特性表明:undefined是一个不能被配置(non-configurable),不能被重写(non-writable)的属性。即便事实并非如此,也要避免去重写它。但是它有可能在非全局作用域中被当作标识符(变量名)来使用 (因为undefined不是一个保留字!!!) ,这样做是一个非常坏的主意,因为这样会使你的代码难以去维护和排错,这是 JavaScript 语言公认的设计失误之一。

JavaScript 保留关键字
在 JavaScript 中,一些标识符是保留关键字,不能用作变量名或函数名,因为这些保留关键字是作为 Javascript 以后扩展使用。
null是保留字,但是undefined不是!

总结:
在全局作用域中无法将undefined当作标识符来使用,因为undefined是全局属性,即全局中已经有了undefined这个变量,重复声明也会报错。
在局部作用域中将undefined当作标识符来使用不会报错,但是会改变undefined的值和类型,不建议使用。

代码验证一下

undefined可以作为关键字,但是null不可以,会提示错误:null不可以作为关键字。
在这里插入图片描述

F12中验证一下:
在这里插入图片描述

全局作用域使用undefined作为标识符也会报错:
在这里插入图片描述

局部作用域中使用undefined作为标识符不会报错,但是不推荐使用
在这里插入图片描述
获取undefined的值
如果想要获取undefined的值,又担心undefined有可能中途被修改过,可以使用void 0来获取undefined。
void 运算符: 对给定的表达式进行求值,然后返回 undefined。
即void后面跟上任何的表达式或者代码都是返回undefined,但是为了减少字节,更推荐直接使用void 0。且void 0 占用的字节也少于undefined。

var x;
if(x === void 0) {
    // 执行这些语句
}

// 没有声明y
if(y === void 0) {
    // 抛出一个RenferenceError错误(与`typeof`相比)
}

var m;
if(typeof m === 'undefined') {
    // 执行这些语句
}

// 这里没有声明z
if(typeof z === 'undefined') {       // 没有错误,执行结果为true
   console.log("z is " + typeof y )  // z is undefined
}

if(e === undefined) {                // ReferenceError: e is not defined

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值