JavaScript中null 和 undefined 的区别以及 typeof 与 instanceof 的区别

本文详细介绍了JavaScript中null和undefined的区别,以及typeof和instanceof的用法。null表示空值,常用于函数参数和原型链终点;undefined表示值未定义,常见于变量声明、函数参数和对象属性。typeof返回变量的数据类型,但将所有引用类型识别为object,而instanceof用于判断对象是否属于特定原型。此外,文章还展示了布尔转换、数字和字符串转换的示例,并讨论了不同数据类型的比较和转换问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、首先看一个判断题:null和undefined 是否相等

  console.log(null==undefined)  //true
  console.log(null===undefined)  //false
  console.log(typeof null)   // "object"
  console.log(typeof undefined)  // "undefined"

观察可以发现:null 和 undefined 两者相等,但是当两者做全等比较时,两者又不等。

原因:

  • null: object类型,代表“空值”,代表一个空对象指针。
  • undefined: undefined类型

2、null 和 undefined 的区别

null表示"没有对象",即该处不应该有值。典型用法是:

(1) 作为函数的参数,表示该函数的参数不是对象。

(2) 作为对象原型链的终点

undefined表示"缺少值",就是此处应该有一个值,但是还没有定义。典型用法是:

(1)变量被声明了,但没有赋值时,就等于 undefined。

(2) 调用函数时,应该提供的参数没有提供,该参数等于 undefined。

(3)对象没有赋值的属性,该属性的值为 undefined。

(4)函数没有返回值时或者 return 后面什么也没有,返回 undefined。

3、JS 中 typeof 与 instanceof 的区别

(1)typeof 可用来获取检测变量的数据类型

用法:

使用形式如下两种方式,operand是表达式(括号可选可不选)
typeof operand
or
typeof (operand)
  • typeof 是一个一元运算,放在一个运算数之前,运算数可以是任意类型。
  • 它的返回值是一个字符串,该字符串说明运算数的类型。(typeof 运算符返回一个用来表示表达式的数据类型的字符串。 )
  • typeof 其实就是判断参数是什么类型的实例,就一个参数。
  • typeof 一般只能返回如下几个结果:"number"、"string"、"boolean"、"object"、"function" 和 "undefined"
console.log(typeof (123));  // "number"
console.log(typeof ("abc"));  // "string"
console.log(typeof true);  // "boolean"
console.log(typeof (function () { }));  // "function"
console.log(typeof []);  // "object"
console.log(typeof {});  // "object"
console.log(typeof null);  // "object"
console.log(typeof undefined);  // "undefined"

在 JavaScript 中,判断一个变量的类型常常会用 typeof 运算符,在使用 typeof 运算符时判断引用类型存储值时会出现一个问题,无论引用的是什么类型的对象,它都返回 “object”。这就需要用到 instanceof 来检测某个对象是不是另一个对象的实例

(2)instanceof

用法:

object instanceof constructor
例:
var a = [];
a instanceof Array
  • instanceof 用于判断一个变量是否某个对象的实例
  • instanceof 的返回值是 bool 类型
console.log([] instanceof Array);  // true
console.log([] instanceof Object);  // true
console.log({} instanceof Object);  // true
console.log({} instanceof Function);  // false
console.log(function () { } instanceof Object);  // true
console.log(function () { } instanceof Function);  // true
console.log(Object instanceof Function);  // true
console.log(Function instanceof Object);  // true

(3)使用场景

  1. typeof 主要用来返回目标表达式的的数据类型。
  2. instanceof 主要用于判断一个对象是否是一个实例的原型。

4、一些常见的案例

(1)typeof 1==1,输出是什么? false

console.log(typeof 1 == 1)  // false
// 等价于
// let a = typeof 1;  // a = "number";
// a == 1

(2)强制类型转换

  • Boolean(value)——把给定的值转换成Boolean型;
  • Number(value)——把给定的值转换成数字(可以是整数或浮点数);
  • String(value)——把给定的值转换成字符串。

1)Boolean(value)——把给定的值转换成Boolean型

  • 代表空、否定的值会被转换为 false ,如 ''、0、NaN、null、undefined
  • 其余值都会被转换为 true。
console.log(Boolean(0));   // false
console.log(Boolean(1));   // true
console.log(Boolean(null));   // false
console.log(Boolean(undefined));   // false
console.log(Boolean([]));     // true
console.log(Boolean({}));     // true
console.log(Boolean(NaN));    // false
console.log(Boolean('abc'));  // true
console.log(Boolean(''));     // false
console.log(Boolean(123));    // true
console.log(Number(false));   // 0
console.log(Number(true));   //  1
console.log(Number(null));   //  0
console.log(Number(undefined));   //  NaN
console.log(Number({}));   //  NaN
console.log(Number([]));   //  0
console.log(Number('abc'));   //  NaN
console.log(Number(NaN));   //  NaN
console.log(Number(100));   //  100
console.log(Number("5.5  "));   //  5.5
console.log(Number("  56  "));   //  56
console.log(Number("5.6.7  "));   //  NaN
console.log(String(1));   // "1"
console.log(String(null));   // "null"
console.log(String(undefined));   // "undefined"
console.log(String(NaN));   // "NaN"
console.log(String([]));   //  ""
console.log(String([1, 2, 3]));   // "1,2,3"
console.log(String({}));   // "[object Object]"
console.log(String({ "a": 1, "b": 2, "c": 3 }));   // "[object Object]"

(3)例子

布尔类型有两个值:true 和 false ,其中 true 表示真(对),而 false 表示假(错)。

布尔型和数字型相加的时候, true 的值为 1 ,false 的值为 0。

console.log(null == undefined);  // true
console.log(null === undefined); // false
console.log(0 == null);  // false
console.log('0' == null); // false
console.log('0' == NaN);  // false
console.log(NaN == NaN);  // false
console.log(null == null); // true
console.log(null === null); // true
console.log(undefined == undefined); // true
console.log(undefined === undefined); // true

console.log(1 + {});  // "1[object Object]"
console.log(1 + []);  // "1" 
console.log(1 - {});  // NaN 
console.log(1 - []);  // 1 
console.log(1 + null);   // 1
console.log(1 - null);   // 1
console.log(1 + undefined);  // NaN
console.log(1 - undefined);  // NaN
console.log(1 + NaN);  // NaN
console.log(1 - NaN);  // NaN

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值