javascript 中 "undefined" 与 "is not defined" 分析
var var1;
console.log( typeof var0);//print "undefined",主要看下面对var0单独的输出
console.log( typeof var1);//print "undefined"
console.log( typeof true);//print "boolean"
console.log( typeof false);//print "boolean"
console.log( typeof 1);//print "number"
console.log( typeof "string");//print "string"
console.log( typeof (new Object()));//print "object"
console.log( typeof null);//print "object"
console.log( typeof NaN);//print "number"
console.log( typeof undefined);//print "undefined" //console.log(var0);//Uncaught ReferenceError: var0 is not defined 浏览器直接报错.且终止程序.因为var0从未声明过.而且更未赋值.但是可以参与typeof运算.程序不会终止.console.log(var1);//undefined,不是is not defined.也即使说已经声明.但是未赋值.这样就是undefined.
console.log(true);//print "true"
console.log(false);//print "false"
console.log(1);//print "1"
console.log("string");//print "string"
console.log((new Object()));//print "object"
console.log(null);//print "null";null 表示不存在.
console.log(NaN);//print "NaN" ;是number类型里面的概念.当两个数字运算结果居然不是数字了.即非数字not a number.NaN.比如0/0.这个是没有意义的.所以是NaN
console.log(undefined);//print "undefined" ;表示变量声明在.但是不知道不确定变量到底是个什么东西.
上面我在代码里面通过注释大概解释了why.
细微变换一下:
console.log(var10);//undefined.注意这里的var10是在这个语句的后面声明的.为什么不是is not defined呢?因为Javascript语言是"先解析,后运行",运行时就已经完成了变量声明,这其实是javascript的"代码提升"(hoisting)功能.现在只对var声明的变量做hoisting
var var10;
如果不是变量.而是对象里面的属性.
var obj1 = {};
console.log(obj1.attr1);//undefined,对象里面的属性没有.虽然attr1从来没有声明过.但是却未报错is not defined.引擎对此网开一面了.
function Fun1() {
}
var fun1 = new Fun1();
console.log(fun1.attr1);//undefined,这里用function.其实function本也是对象.new完就是object.
undefined参与运算的情况:
var ufo2=ufo2||3;//运算的地方肯定是undefined;因为前面有做ufo2的声明.但是运算的时候还未赋值.所以undefined相当于false.
console.log(ufo2);//
var ufo4;
if(ufo4) {
console.log("yes");
}else{
console.log("no");//print no.undefined相对与false
}
如果是下面怎样浏览器就报错了.
if(ufo3){//ufo3 is not defined.
}
工作中我们经常需要判断某个变量或者属性是否为undefined。通常使用如下方法:(这里是变量age声明的情况下)
var age;
//方法1
console.log(typeof age === 'undefined');//只能用 === 运算来测试某个值是否是未定义的,因为 == 运算符认为 undefined 值等价于 null。
//方法2
console.log(age === undefined);//null 表示无值,而 undefined 表示一个未声明的变量,或已声明但没有赋值的变量,或一个并不存在的对象属性。
如果不声明age.方式2会报错.这就是前面说过的.未声明的变量(is not defined)参与typeof运算是可以的.
第一种方式是先阶段应用最广且不容易犯错的方式.推荐使用.
undefined是无法使用 for/in 循环来枚举的,也不能用 delete 运算符来删除它。undefined 不是常量,可以把它设置为其他值。所以很多框架代码做立即执行的时候都会把undefined做为参数传入.怎样可以避免其他人去修改undefined的原始值.个人觉得ECMA应该把这个修改为只读.当尝试读取不存在的对象属性时也会返回undefined。
javascript 中 "undefined" 与 "is not defined" 分析的更多相关文章
- JavaScript中undefined 和not defined
首先呢,我们来介绍undefined,xx is not defined的区别 (创建一个html文件,在头部编写JavaScript代码) 我们先编写如下代码: <script type=&q ...
- JavaScript 中undefined,null,NaN的区别
1.类型分析: js中的数据类型有undefined,boolean,number,string,object等5种,前4种为原始类型,第5种为引用类型.var a1;var a2 = true;va ...
- Javascript中undefined,NaN等特殊比较
以下内容转自: http://blog.csdn.net/hongweigg/article/details/38090093 1.问题:在Javascript中,typeof(undefined) ...
- javascript中基本类型和引用类型的区别分析
大多数人系统学习过的程序设计语言,在这些语言的学习过程中最早学到的几个要点之一就是值类型和引用类型的区别.下面我们来看一下在 JavaScript 中基本数据类型(Primitive Types)和引 ...
- JavaScript中[]+[] 、[]+{}、{}+[]、{}+{}的结果分析
看到这样一个问题:{} + [] 的结果是多少? 一脸懵逼.. 于是在chrome控制台运行 {} + [] 和用 console.log({} + []) 输出,发现结果不一样.. 于是,把各种可能 ...
- JavaScript中undefined和not defined 的区别
参考:某个大佬的博客 以下原创: <script type="text/javascript"> console.log(a); a = 100; </scrip ...
- JavaScript中undefined与null的区别
通常情况下, 当我们试图访问某个不存在的或者没有赋值的变量时,就会得到一个undefined值.Javascript会自动将声明是没有进行初始化的变量设为undifined. 如果一个变量根本不存在会 ...
- 【转】JavaScript中undefined与null的区别
通常情况下, 当我们试图访问某个不存在的或者没有赋值的变量时,就会得到一个undefined值.Javascript会自动将声明是没有进行初始化的变量设为undifined. 如果一个变量根本不存在会 ...
- [转]javascript中基本类型和引用类型的区别分析
基本类型和引用类型 ECMAScript包含两个不同类型的值:基本类型值和引用类型值.基本类型值指的是简单的数据段:引用类型值指由多个值构成的对象.当我们把变量赋值给一个变量时,解析器首先要做的就是确 ...
随机推荐
- 【BZOJ2286】消耗战(虚树,DFS序,树形DP)
题意:一棵N个点的树上有若干个关键点,每条边有一个边权,现在要将这些关键点到1的路径全部切断,切断一条边的代价就是边权. 共有M组询问,每组询问有k[i]个关键点,对于每组询问求出完成任务的最小代价. ...
- 视音频数据处理入门:RGB、YUV像素数据处理【转】
转自:http://blog.csdn.net/leixiaohua1020/article/details/50534150 ==================================== ...
- 标准C程序设计七---51
Linux应用 编程深入 语言编程 标准C程序设计七---经典C11程序设计 以下内容为阅读: <标准C程序设计>(第7版) 作者 ...
- delphi 四舍五入Round函数【百帖整理】
在最近版本的Delphi Pascal 编译器中,Round 函数是以 CPU 的 FPU (浮点部件) 处理器为基础的.这种处理器采用了所谓的 "银行家舍入法",即对中间值 (如 ...
- POJ 3259 Wormholes 最短路+负环
原题链接:http://poj.org/problem?id=3259 题意 有个很厉害的农民,它可以穿越虫洞去他的农场,当然他也可以通过道路,虫洞都是单向的,道路都是双向的,道路会花时间,虫洞会倒退 ...
- 邁向IT專家成功之路的三十則鐵律 鐵律十六:IT人交友之道-單純
元曲知名的作家 白樸,曾在沉醉東風﹒漁夫一文創作中,寫道:「雖無刎頸交,卻有忘機友」.IT人交朋友應首重在單純而非廣泛,因為實際上越複雜的朋友圈,只會為你的工作以及生活帶來許多不必要的麻煩.至於男女朋 ...
- 【IntelliJ IDEA】idea导入项目只显示项目中的文件,不显示项目结构
导入项目之后,只显示项目文件,不显示项目结构 解决方法 1.点击file->project structure..->Modules 点击右上角+加号 ->import Module ...
- Java程序员从笨鸟到菜鸟之(五十二)细谈Hibernate(三)Hibernate常用API详解及源码分析--csdn 曹胜欢
新接触一个框架的目的就是想利用这个框架来为我们做一些工作,或者是让他来简化我们的工作,利用这个框架无非就是要利用这个框架所给我们提供的API去操作我们的数据,所以利用一个框架的好坏很大一部分取决于你对 ...
- tensorflow搭建神经网络基本流程
定义添加神经层的函数 1.训练的数据2.定义节点准备接收数据3.定义神经层:隐藏层和预测层4.定义 loss 表达式5.选择 optimizer 使 loss 达到最小 然后对所有变量进行初始化,通过 ...
- 转: WebRTC音视频引擎研究(1)--整体架构分析
转自: http://blog.csdn.net/temotemo/article/details/7530504 目录(?)[+] WebRTC技术交流群:234795279 原文地址:ht ...