聊聊javascript的null和undefined
只要是说到js的变量和数据类型,就脱不开null和undefined,这兄弟俩就是js的重要基础,不可不察,无数的同学们都用过放大镜多角度多批次地研究过这兄弟俩,真是深受欢迎。^-^
js也真是怪异,有个null不够,还要折腾出个undefined。
虽然被诟病,但这就是设计。
在c#和java中,null就是表示空,没有分配内存。
在js中的null采用Number(null)的结果是0,代表什么,代表这不是空,仅仅是空值,是没有值,它的数据类型是"object"。
那么为了表示空,所以设计者搞了一个undefined,它有单独的数据类型就是"undefined"。
使用Number(undefined)的结果是NaN,转换结果也能达到设计目的。
造成这样的设计结果,表达式中的数据类型转换起了关键作用。
未定义的变量或已定义的但未赋值的变量就表示空,就是undefined。
undefined更多的是javascript本身使用。
比如,码农要想删除一个对象的属性不是把这个属性赋上undefined,因为这样属性还是在,用hasOwnProperty检测一下这个属性还是存在,在有些逻辑需要判断的地方就会出问题,要是删除属性就前置delete。
var o1={p1:'v1',p2:'v2'};
o1.p2=undefined;
o1.hasOwnProperty('p2'); //true
要删除数组元素,为了没有副作用,那么就用splice。
码农要是使用undefined来赋值就要想想清楚了。
对于码农来说,更多的是使用null,可以将一个变量赋上空值,断开和对象实例的联系,保证垃圾回收,也可以以备该变量符号后续使用。
null和undefined比较的时候也是坑坑坑
null == undefined //true
null == false //false
undefined == false //false
虽然怪异,但这就是结果,这就是设计。
END
聊聊javascript的null和undefined的更多相关文章
- JavaScript中Null和Undefined的深渊
探索JavaScript中Null和Undefined的深渊 当讨论JavaScript中的原始数据类型时,大多数人都知道的基本知识,从String,Number到Boolean.这些原始类型相当简单 ...
- 细说Javascript之null、undefined和NaN
首先简单介绍一下Javascript中的数据类型,Javascript中的数据类型有undefined,boolen,number,string和object等5种,前4种是原始类型,第5种是引用类型 ...
- JavaScript typeof, null, 和 undefined
typeof 操作符 你可以使用 typeof 操作符来检测变量的数据类型. 实例 typeof "John" // 返回 string typeof ...
- JavaScript中null和undefined的总结
先说null,它表示一个特殊值,常用来描述“空值”.对null执行typeof运算,结果返回字符串“object”,也就是说,可以将null认为是一个特殊的对象值,含义是“非对象”(感觉怪怪的).实际 ...
- JavaScript中null和undefined
JavaScript的数据类型大体分为两类:原始类型和对象类型.其中,原始类型包括数字.字符串和布尔值.此外,JavaScript中还有两个特殊的原始值:null(空)和undefined(未定义), ...
- 关于 JavaScript 的 null 和 undefined,判断 null 的真实类型
null.undefined 博客地址: https://ainyi.com/39 undefined:表示一个变量最原始的状态,而非人为操作的结果 null:表示一个对象被人为的重置为空对象,而非一 ...
- 探索JavaScript中Null和Undefined的深渊
当讨论JavaScript中的原始数据类型时,大多数人都知道的基本知识,从String,Number到Boolean.这些原始类型相当简单,行为符合常识.但是,本文将更多聚焦独特的原始数据类型Null ...
- JavaScript处理null、undefined和空值
最近一直在写前端,在使用jquery的ajax请求然后处理返回值的时候,经常会遇到返回值为undefined或者"null"的情况,很是头疼,而返回接口是来自于其他公司的,所以这种 ...
- JavaScript中Null和Undefined的区别
Null: null是js中的关键字,表示空值,null可以看作是object的一个特殊的值,如果一个object值为空,表示这个对象不是有效对象. Undefined: undefined不是js中 ...
随机推荐
- iOS获取真机沙盒文件、获取真机本地数据
有时我们需要对真机内的数据进行分析,那么如何获取沙盒所有数据文件呢? 1.设备连接到电脑,打开xcode 2.打开window-devices 3.打开后,选择设备名,选择app,导出数据 4.最后拿 ...
- Java Exceptions
invalid end header( bad central directory size) 异常描述 java.util.zip.ZipException: invalid END header ...
- Python函数的静态变量
C语言中,在函数内部可以定义static类型的变量,这个变量是属于这个函数的全局对象.在Python中也可以实现这样的机制. def f(): if not hasattr(f, 'x'): f.x ...
- 【虚拟化系列】VMware vSphere 5.1 虚拟机管理
在上一博文中我们安装了强大的VMware vCenter管理中心,通过VMware vSphere Client连接到VMware vCenter管理中心, vSphere 的两个核心组件是 ...
- 使用tmpfs的好处
EBS上超高频率的IO写入 这几天注意到我的EC2机器上有非常大量的IO,导致AWS的总体开销增加了很多.比如9月份的帐单中: I/O requests 120,076,984 IOs ...
- linux RPM包安装、更新、删除等操作命令简明总结, 如何查看yum安装的软件路径 ?
rpm -ivh package.rpm 安装一个rpm包rpm -ivh --nodeeps package.rpm 安装一个rpm包而忽略依赖关系警告rpm -U package.rpm 更新一个 ...
- 怎样看待IT界业务,技术,管理的各自比重
怎样看待IT界业务,技术,管理的各自比重 技术是根本,业务是个人能力的体现,管理一般随意,追求简单,眼光向IBM等有优秀管理经验的大公司看齐 重点从个人的喜好.性格方面来考虑分配比重,可以加上 ...
- Andoird通信之简单聊天ChatApp
Android通信,大体上的逻辑是跟Java上的通信是差不多的,只是因为Android线程不能直接访问UI界面组件,所以在处理的时候有些麻烦,只要是通过Handle处理. 接下来是一个简单地手机聊天A ...
- ASP.NET MVC3 Model验证总结 @Html.ValidationSummary(true)
http://www.wyjexplorer.cn/Post/2012/8/3/model-validation-in-aspnet-mvc3 ASP.NET MVC3中的Model是自验证的,这是通 ...
- 反射已经"Out",动态编译才能"Hold"住
Net支持反射功能以后,确实使我们Net程序眼前一亮啊,真是太神奇了,只需要传入字符串就可以完成功能.可以说,反射功能的引入,使我们在处理某些问题上更加得心应手. 传统的Db管理软件中,数据库字段的频 ...