undefined详解
【对于《JS高级程序设计》的理解】
“即使未初始化的变量会自动被赋值undefined值,但显式地初始化变量依然是明智的选择。如果能够做到这一点,那么当typeof操作符返回‘undefined’值时,我们就知道被检测的变量还没有被声明,而不是尚未初始化。”
之前一直对这段话不理解,不知道说的到底是什么意思;今天重新回到这里,思考这段话,仔细想了一下;
‘显式地初始化变量依然是明智的选择’这段话是歧义的根源,之前被我理解为,显示地初始化为undefined,这样做导致后面说的就不成立,无论是声明不声明结果还是一样的,因为默认undefined;
而重新理解,应该是:初始化为一个非undefined的值,这样就成立了;可以用空的占位符,如:
- String类型:var str = '';
- Number类型:var num = 0;
- Boolean类型:var boo = true/false;
- Object类型:var obj = {};
- 数组:var arr = [];
意思就是,使用变量的时候,要对变量进行初始化一个非undefined的值,这样后面我们在用typeof进行检测,只要返回undefined就认为是未声明的变量是成立的
【严格相等和undefined】
var name;
if(name === undefined){
//执行语句
}else{
//不执行的语句
}
注意:这里必须使用严格相等操作符(===)而不是标准相等操作符(==),因为undefined==null,也就是name == undefined会检测name是不是null,但是严格相等不会检查。
【Void操作符和undefined】
console.log(void(0));//undefined
console.log(void 0);//undefined
所以:
if(x === void 0) {
// 执行这些语句
}
// 没有声明y
if(y === void 0) {
// 抛出一个RenferenceError错误(与`typeof`相比)
}
理解:可以直接把void 0当成undefined看待
【undefined和null的不同点】
- null是一个字面量(不是属性),undefined是全局对象的一个属性
- typeof null; //object
- typeof undefined; //undefined
- null === undefined; // false
- null == undefined; // true
- isNaN(1 + null); //false
- isNaN(1 + undefined); //true
undefined详解的更多相关文章
- ECMAScript---布尔类型、null、undefined详解
布尔类型中 至只有 true和false 在开发中它是非常重要的两个值,尤其是在条件判断中 如何把其他类型转换为布尔类型? 1.Boolean() Boolean(1); //true Boolean ...
- 详解jquery插件中(function ( $, window, document, undefined )的作用。
1.(function(window,undefined){})(window); Q:(function(window,undefined){})(window);中为什么要将window和unde ...
- Node.js npm 详解
一.npm简介 安装npm请阅读我之前的文章Hello Node中npm安装那一部分,不过只介绍了linux平台,如果是其它平台,有前辈写了更加详细的介绍. npm的全称:Node Package M ...
- 详解javascript的类
前言 生活有度,人生添寿. 原文地址:详解javascript的类 博主博客地址:Damonare的个人博客 Javascript从当初的一个"弹窗语言",一步步发展成为现在前后端 ...
- 基于H5的微信支付开发详解
这次总结一下用户在微信内打开网页时,可以调用微信支付完成下单功能的模块开发,也就是在微信内的H5页面通过jsApi接口实现支付功能.当然了,微信官网上的微信支付开发文档也讲解的很详细,并且有实现代码可 ...
- JavaScript事件详解-jQuery的事件实现(三)
正文 本文所涉及到的jQuery版本是3.1.1,可以在压缩包中找到event模块.该篇算是阅读笔记,jQuery代码太长.... Dean Edward的addEvent.js 相对于zepto的e ...
- ****基于H5的微信支付开发详解[转]
这次总结一下用户在微信内打开网页时,可以调用微信支付完成下单功能的模块开发,也就是在微信内的H5页面通过jsApi接口实现支付功能.当然了,微信官网上的微信支付开发文档也讲解的很详细,并且有实现代码可 ...
- 详解Javascript的继承实现(二)
上文<详解Javascript的继承实现>介绍了一个通用的继承库,基于该库,可以快速构建带继承关系和静态成员的javascript类,好使用也好理解,额外的好处是,如果所有类都用这种库来构 ...
- Javascript中call,apply,bind方法的详解与总结
在 javascript之 this 关键字详解 文章中,谈及了如下内容,做一个简单的回顾: 1.this对象的涵义就是指向当前对象中的属性和方法. 2.this指向的可变性.当在全局作用域时,thi ...
随机推荐
- CentOS7安装Hadoop2.7完整步骤
总体思路,准备主从服务器,配置主服务器可以无密码SSH登录从服务器,解压安装JDK,解压安装Hadoop,配置hdfs.mapreduce等主从关系. 1.环境,3台CentOS7,64位,Hadoo ...
- PHP--- JSON和数组的转换
一.json_encode() <?php $arr =array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5); echo json_ ...
- c#元组举例
元组的概要: 数组合并了相同类型的对象,而元组合并了不同类型的对象.元组起源于函数编程语言(如F#) ,在 这些语言中频繁使用元组.在N盯4中,元组可通过.NET Fmmework用于所有的NET语言 ...
- ubuntu 上 安装多个php版本
Ubuntu上官方的源,比如 Ubuntu14.04 默认源中的是 PHP5.6.x.Ubuntu16.04 默认源中的是 PHP7.0.x,那么如果想在 Ubuntu16.04 上安装 PHP7.1 ...
- Python 2 到 Python 3 的变化
1: commands 被 subprocess 所取代:举例 Python2中使用getoutput: >>> import commands >>> print ...
- 实现celery中出现拥挤队列时,及时发邮件通知
里面有几个常用的功能,以后值得借鉴. 如获取脚本目录,IP,获取shell返回值,发送邮件等.. 上午写完,中午测试,下午上线~~ #!/usr/bin/env python # -*- coding ...
- cocos2dx2.x 创建项目
cocos2d-x下载地址:http://www.cocos2d-x.org/download 2.0之后的创建项目比较easy了 第一步,首先 cd cocos2d-x-2.2.1/tools/pr ...
- Hadoop案例(五)过滤日志及自定义日志输出路径(自定义OutputFormat)
过滤日志及自定义日志输出路径(自定义OutputFormat) 1.需求分析 过滤输入的log日志中是否包含xyg (1)包含xyg的网站输出到e:/xyg.log (2)不包含xyg的网站输出到e: ...
- 快速搭建sonar代码质量管理平台
安装 下载,直接解压http://www.sonarqube.org/downloads/ 添加mysql驱动至\extensions\jdbc-driver\mysql\ 创建mysql数据库和用户 ...
- JAVA编程思想读书笔记(二)--容器
接上篇JAVA编程思想读书笔记(一) 第八章.对象的容纳 No1: java提供了四种类型的集合类:Vector(矢量).BitSet(位集).Stack(堆栈).Hashtable(散列表) No2 ...