【对于《JS高级程序设计》的理解】

“即使未初始化的变量会自动被赋值undefined值,但显式地初始化变量依然是明智的选择。如果能够做到这一点,那么当typeof操作符返回‘undefined’值时,我们就知道被检测的变量还没有被声明,而不是尚未初始化。”

之前一直对这段话不理解,不知道说的到底是什么意思;今天重新回到这里,思考这段话,仔细想了一下;

‘显式地初始化变量依然是明智的选择’这段话是歧义的根源,之前被我理解为,显示地初始化为undefined,这样做导致后面说的就不成立,无论是声明不声明结果还是一样的,因为默认undefined;

而重新理解,应该是:初始化为一个非undefined的值,这样就成立了;可以用空的占位符,如:

  1. String类型:var str = '';
  2. Number类型:var num = 0;
  3. Boolean类型:var boo = true/false;
  4. Object类型:var obj = {};
  5. 数组: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的不同点】

  1. null是一个字面量(不是属性),undefined是全局对象的一个属性
  2. typeof null; //object
  3. typeof undefined; //undefined
  4. null === undefined; // false
  5. null == undefined; // true
  6. isNaN(1 + null); //false
  7. isNaN(1 + undefined); //true

undefined详解的更多相关文章

  1. ECMAScript---布尔类型、null、undefined详解

    布尔类型中 至只有 true和false 在开发中它是非常重要的两个值,尤其是在条件判断中 如何把其他类型转换为布尔类型? 1.Boolean() Boolean(1); //true Boolean ...

  2. 详解jquery插件中(function ( $, window, document, undefined )的作用。

    1.(function(window,undefined){})(window); Q:(function(window,undefined){})(window);中为什么要将window和unde ...

  3. Node.js npm 详解

    一.npm简介 安装npm请阅读我之前的文章Hello Node中npm安装那一部分,不过只介绍了linux平台,如果是其它平台,有前辈写了更加详细的介绍. npm的全称:Node Package M ...

  4. 详解javascript的类

    前言 生活有度,人生添寿. 原文地址:详解javascript的类 博主博客地址:Damonare的个人博客 Javascript从当初的一个"弹窗语言",一步步发展成为现在前后端 ...

  5. 基于H5的微信支付开发详解

    这次总结一下用户在微信内打开网页时,可以调用微信支付完成下单功能的模块开发,也就是在微信内的H5页面通过jsApi接口实现支付功能.当然了,微信官网上的微信支付开发文档也讲解的很详细,并且有实现代码可 ...

  6. JavaScript事件详解-jQuery的事件实现(三)

    正文 本文所涉及到的jQuery版本是3.1.1,可以在压缩包中找到event模块.该篇算是阅读笔记,jQuery代码太长.... Dean Edward的addEvent.js 相对于zepto的e ...

  7. ****基于H5的微信支付开发详解[转]

    这次总结一下用户在微信内打开网页时,可以调用微信支付完成下单功能的模块开发,也就是在微信内的H5页面通过jsApi接口实现支付功能.当然了,微信官网上的微信支付开发文档也讲解的很详细,并且有实现代码可 ...

  8. 详解Javascript的继承实现(二)

    上文<详解Javascript的继承实现>介绍了一个通用的继承库,基于该库,可以快速构建带继承关系和静态成员的javascript类,好使用也好理解,额外的好处是,如果所有类都用这种库来构 ...

  9. Javascript中call,apply,bind方法的详解与总结

    在 javascript之 this 关键字详解 文章中,谈及了如下内容,做一个简单的回顾: 1.this对象的涵义就是指向当前对象中的属性和方法. 2.this指向的可变性.当在全局作用域时,thi ...

随机推荐

  1. [ python ] 进程的操作

    目录 (见右侧目录栏导航)- 1. 前言- 2. multiprocess模块- 2.1 multiprocess.Process模块    - 2.2 使用Process模块创建进程    - 2. ...

  2. javascript sleep方法

    function sleep(numberMillis) {     var now = new Date();     var exitTime = now.getTime() + numberMi ...

  3. python基础(9)--递归、二叉算法、多维数组、正则表达式

    1.递归 在函数内部,可以调其他函数,如果一个函数在内部调用它本身,这个函数就是递归函数.递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于裂解 递归算法解决问题的特点: 1)递归是 ...

  4. OpenCV3学习笔记

    http://blog.csdn.net/u010429424/article/details/73691001 http://blog.csdn.net/zhaoxfxy/article/detai ...

  5. IEEEXtreme 10.0 - Food Truck

    这是 meelo 原创的 IEEEXtreme极限编程大赛题解 Xtreme10.0 - Food Truck 题目来源 第10届IEEE极限编程大赛 https://www.hackerrank.c ...

  6. 反片语(UVa156)

    题目具体描述见:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=835&a ...

  7. 关于node的path模块

    const path=require('path'); //basename('绝对路径','截取的后缀') 返回文件的扩展名 let a=path.basename('C:\\temp\\myfil ...

  8. javascript 进制转换(2进制、8进制、10进制、16进制之间的转换)

    //十进制转其他 var x=110; alert(x); alert(x.toString(8)); alert(x.toString(32)); alert(x.toString(16)); // ...

  9. JSP中动态INCLUDE与静态INCLUDE的区别?

    动态INCLUDE用jsp:include动作实现 它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数 静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含 ...

  10. python 学习笔记 - Queue & Pipes,进程间通讯

    上面写了Python如何创建多个进程,但是前面文章中创建的进程都是哑巴和聋子,自己顾自己执行,不会相互交流.那么如何让进程间相互说说话呢?Python为我们提供了一个函数multiprocessing ...