Javascript类型系统之undefined和null浅析

作者:小火柴的蓝色理想 时间:2024-04-16 09:32:46 

前面的话

一般的程序语言,表示空的只有null,但javascript的设计者Brendan Eich却设计了一个undefined,这无疑增加了程序复杂度,但这样做也是有一定原因的。本文将详细介绍javascript中的undefined和null

历史原因

1995年JavaScript诞生时,最初像Java一样,只设置了null作为表示”无”的值。根据C语言的传统,null被设计成可以自动转为0

但是,JavaScript的设计者Brendan Eich,觉得这样做还不够,有两个原因。首先,null像在Java里一样,被当成一个对象。但是,JavaScript的值分成原始类型和对象类型两大类,Brendan Eich觉得表示”无”的值最好不是对象。其次,JavaScript的最初版本没有包括错误处理机制,发生数据类型不匹配时,往往是自动转换类型或者默默地失败。Brendan Eich觉得,如果null自动转为0,很不容易发现错误

因此,Brendan Eich又设计了一个undefined。他是这样区分的:null是一个表示”无”的对象,转为数值时为0;undefined是一个表示”无”的原始值,转为数值时为NaN

但是,目前null和undefined基本是同义的,都是原始类型,且只有一些细微的差别

undefined

Undefined类型只有一个值,就是undefined。当声明的变量未初始化时,该变量的默认值是undefined。所以一般地,undefined表示变量没有初始化


var test;//undefined
console.log(test == undefined);//true
var test = undefined;//undefined

对于尚未声明过的变量只能执行一项操作,使用typeof操作符检测其数据类型,但严格模式下会导致错误

typeof(test);//undefined

【出现场景】

【1】已声明未赋值的变量

【2】获取对象不存在的属性

【3】无返回值的函数的执行结果

【4】函数的参数没有传入

【5】void(expression)


var i;
console.log(i);//undefined
var o = {};
console.log(o.p);//undefined
function f(){};
console.log(f());//undefined
function f(x){return x;}
console.log(f());//undefined
console.log(void(0));//undefined

【类型转换】


Boolean(undefined): false
Number(undefined): NaN
String(undefined):'undefined'

null

Null类型只有一个值,就是null。null是javascript语言的关键字,它表示一个特殊值,常用来描述"空值"

逻辑角度看,null值表示一个空对象指针

[注意]null是空对象指针,而[]是空数组,{}是空对象,三者不相同


console.log(typeof null);//'object'

尽管null和undefined是不同的,但它们都表示"值的空缺",null表示"空值",undefined表示"未定义"。两者往往可以互换。判断相等运算符==认为两者是相等的


console.log(null == undefined);//true

实际上,因为undefined和null不是构造器类型,所以它们没有任何的属性和方法,使用.和[]来存取这两个值的成员或方法都会产生一个类型错误

【类型转换】


Boolean(null): false
Number(null): 0
String(null):  'null'

下面给大家介绍javascript中null和undefined的区别

undefined表示变量声明但未初始化时的值,null表示准备用来保存对象,还没有真正保存对象的值。从逻辑角度看,null值表示一个空对象指针。

JavaScript(ECMAScript标准)里共有5种基本类型:Undefined, Null, Boolean, Number, String,和一种复杂类型Object。可以看到null和undefined分属不同的类型,未初始化定义的值用typeof检测出来是"undefined"(字符串),而null值用typeof检测出来是"object"(字符串)。

任何时候都不建议显式的设置一个变量为undefined,但是如果保存对象的变量还没有真正保存对象,应该设置成null。
实际上,undefined值是派生自null值的,ECMAScript标准规定对二者进行相等性测试要返回true,即


alert(null==undefined); // true

来源:http://www.cnblogs.com/xiaohuochai/archive/2016/07/13/5665637.html

标签:js,undefined,null
0
投稿

猜你喜欢

  • python匿名函数lambda原理及实例解析

    2023-01-05 02:55:07
  • Python新建项目自动添加介绍和utf-8编码的方法

    2023-02-07 07:58:06
  • 跟老齐学Python之有容乃大的list(4)

    2023-03-13 21:53:17
  • python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)

    2024-01-13 15:19:57
  • 100%全屏布局设计

    2009-05-15 12:24:00
  • 【MongoDB for Java】Java操作MongoDB数据库

    2023-07-14 01:10:43
  • 一篇文章教会你PYcharm的用法

    2023-06-30 14:18:56
  • 浅谈PHP的反射机制

    2023-06-13 17:05:35
  • 关于Thinkphp6的日志问题

    2023-06-06 10:54:23
  • python使用docx模块读写docx文件的方法与docx模块常用方法详解

    2022-05-14 11:37:17
  • 如何巧妙利用SQL Server的EXISTS结构

    2009-02-19 17:36:00
  • 处理及遍历XML文档DOM元素属性及方法整理

    2024-05-13 10:39:38
  • php编程每天必学之表单验证

    2023-07-19 05:50:59
  • 分享5个python提速技巧,速度瞬间提上来了

    2023-11-04 13:04:06
  • 一文总结MySQL中数学函数有哪些

    2024-01-28 11:24:09
  • CSS像素图制作攻略

    2009-05-19 19:32:00
  • spark编程python实例解读

    2023-06-02 06:12:52
  • pytorch中的inference使用实例

    2023-07-24 16:22:56
  • 基于Python实现船舶的MMSI的获取(推荐)

    2022-02-05 07:44:33
  • javascript在myeclipse中报错的解决方法

    2024-04-22 22:41:55
  • asp之家 网络编程 m.aspxhome.com