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);//3
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。

 

时间: 2024-10-05 08:06:34

javascript 中 "undefined" 与 "is not defined" 分析的相关文章

js基础面试高频面点2:Javascript中undefined和not defined有什么区别?

二.Javascript中undefined和not defined有什么区别? 一句话:udefined为变量正常的数据类型,不是报错,而not defined是指变量没有定义,是报错. 那么,什么是数据类型?js中数据类型有哪些? 数据类型在数据结构中的定义是一组性质相同的值的集合以及定义在这个值集合上的一组操作的总称. js中变量的数据类型有: 值类型(基本类型):字符串(String).数字(Number).布尔(Boolean).对空(Null).未定义(Undefined).Symb

javascript中undefined和null的区别详解

一.问题的由来 永远不要直接使用undefined进行变量判断使用字符串"undefined"对变量进行判断 这里,undefined是原始值,在JS中undefined出现只有两种情况,一种是变量未定义.一种是定义了变量,但是没有赋值. 如果这个地方person未定义,那么利用person===undefined全等判断就会报错,person未定义但是如果使用typeof来判断,那么就不会报错了. ep: alert(person == undefined);//报错 person

JavaScript中undefined和null的区别

JavaScript中undefined和nullundefined:表示没有数值,在使用var 声明变量但未对其加以初始化时,这个变量的值就是undefined null:表示有数值,但是数值为“空”. 1. 两者的声明 声明但未定义:undefined; 1 var a; 2 console.log(a); // 执行结果:undefined 声明且定义为null; 1 var b = null; 2 console.log(b); //执行结果:null 2. typeof类型不同 und

JavaScript 中undefined,null,NaN的区别

1.类型分析: js中的数据类型有undefined,boolean,number,string,object等5种,前4种为原始类型,第5种为引用类型.var a1;var a2 = true;var a3 = 1;var a4 = "Hello";var a5 = new Object();var a6 = null;var a7 = NaN;var a8 = undefined;alert(typeof a); //显示"undefined"alert(typ

Javascript中undefined,NaN等特殊比较

以下内容转自: http://blog.csdn.net/hongweigg/article/details/38090093 1.问题:在Javascript中,typeof(undefined) == undefined成立吗? 答案:不成立,全局函数 typeof()返回值类型为字符串类型,六个可能值: "number", "string", "boolean", "object" ,"function&quo

javascript中基本类型和引用类型的区别分析

大多数人系统学习过的程序设计语言,在这些语言的学习过程中最早学到的几个要点之一就是值类型和引用类型的区别.下面我们来看一下在 JavaScript 中基本数据类型(Primitive Types)和引用类型(Reference Types)的区别.. 基本类型和引用类型 ECMAScript包含两个不同类型的值:基本类型值和引用类型值.基本类型值指的是简单的数据段:引用类型值指由多个值构成的对象.当我们把变量赋值给一个变量时,解析器首先要做的就是确认这个值是基本类型值还是引用类型值. 常见的五种

JavaScript中undefined与null的区别

通常情况下, 当我们试图访问某个不存在的或者没有赋值的变量时,就会得到一个undefined值.Javascript会自动将声明是没有进行初始化的变量设为undifined. 如果一个变量根本不存在会发生什么事: >>> fooReferenceError: foo is not defined 我们得到了一个错误信息.我们在该变量上用typeof操作符看看它是什么类型: >>> typeof foo"undefined" 我们得到的结果为字符串“u

javascript中this的指向(着重分析匿名函数的this指向)

1.this的意义(this是什么?): http://www.ruanyifeng.com/blog/2010/04/using_this_keyword_in_javascript.html this是Javascript语言的一个关键字. 它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用. https://zhuanlan.zhihu.com/p/23804247 this 是你 call 一个函数时传的 context https://dmitripavlutin.com/g

[转]javascript中基本类型和引用类型的区别分析

基本类型和引用类型 ECMAScript包含两个不同类型的值:基本类型值和引用类型值.基本类型值指的是简单的数据段:引用类型值指由多个值构成的对象.当我们把变量赋值给一个变量时,解析器首先要做的就是确认这个值是基本类型值还是引用类型值. 常见的五种基本数据类型是: Undifined.Null.Boolean.Number和String.这五种基本数据类型可以直接操作保存在变量中的实际值. 看下面例子: ? 1 2 3 4 5 6 7 8 9 var a = 10; var b = a;