javascript类型系统——undefined和null全面了解

 更新时间:2016年07月13日 10:05:38   投稿:jingxian  
下面小编就为大家带来一篇javascript类型系统——undefined和null全面了解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

前面的话

一般的程序语言,表示空的只有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基本是同义的,都是原始类型,且只有一些细微的差别

undefinedUndefined类型只有一个值,就是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类型系统——undefined和null全面了解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 尽可能写"友好"的"Javascript"代码

    尽可能写"友好"的"Javascript"代码

    尽可能写"友好"的"Javascript"代码...
    2007-01-01
  • javascript设计模式之命令模式

    javascript设计模式之命令模式

    这篇文章主要为大家介绍了javascript命令模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • js多线程解决方案Web Worker简单说明与实例演示

    js多线程解决方案Web Worker简单说明与实例演示

    这篇文章主要介绍了js多线程解决方案Web Worker,他是HTML5提供的一个JavaScript多线程解决方案,我们可以将一些大计算量的代码交由web Worker运行而不冻结用户界面
    2023-02-02
  • Three.js源码阅读笔记(光照部分)

    Three.js源码阅读笔记(光照部分)

    好久没看Three.js源码了。今天天气不错,接着看;这次从光照部分看起:光照模型,从光线本身角度来看包括环境光、平行光、点光源,从物体表面材质角度看又包括漫反射和镜面反射,需要了解的朋友可以参考下
    2012-12-12
  • JavaScript中的slice()方法使用详解

    JavaScript中的slice()方法使用详解

    这篇文章主要介绍了JavaScript中的slice()方法使用详解,是JS入门学习中的基础知识,需要的朋友可以参考下
    2015-06-06
  • js获取浏览器基本信息大全

    js获取浏览器基本信息大全

    本文整理汇总了js获取浏览器基本信息资料,非常的全面,也对IE及非IE浏览器之间的区别进行了分析,是篇非常不错的文章,这里推荐给大家,前端设计师们千万不要错过
    2014-11-11
  • JavaScript图表插件highcharts详解

    JavaScript图表插件highcharts详解

    本文详细讲解了JavaScript图表插件highcharts的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • 浏览器中url存储的JavaScript实现

    浏览器中url存储的JavaScript实现

    这篇文章主要介绍了浏览器中url存储的JavaScript实现,并且简单讲述了输入url地址后提示过去输入历史记录的原理,需要的朋友可以参考下
    2015-07-07
  • Javascript学习笔记之函数篇(六) : 作用域与命名空间

    Javascript学习笔记之函数篇(六) : 作用域与命名空间

    本文主要讲述了javascript中作用域和命名空间的区别,十分的详细,这里推荐给大家,希望小伙伴能有所收获
    2014-11-11
  • Javascript的作用域、作用域链以及闭包详解

    Javascript的作用域、作用域链以及闭包详解

    本文详细讲解了Javascript的作用域、作用域链以及闭包,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07

最新评论