Javascript中undefined和not defined有什么区别?

概念上的解释:

undefined是javascript语言中定义的五个原始类中的一个,换句话说,undefined并不是程序报错,而是程序允许的一个值。

not defined是javascript在运行我们的javascript代码时,遇到没有定义就用来运算的变量时爆出来的错误。

那么问题来了:在许多的javascript教程中都介绍有javascript变量即使不定义也可以直接拿来使用,但是请注意,这个使用是指可以被赋值,但是不可以被运算。看一个例子

var temp;
temp2 = 123;
alert(temp2);
temp3 = temp4+1;
alert(temp3);

在上面的代码中,第一个alert可以正常弹窗为123;但是第二个alert是不会执行的,因为使用了没有定义的temp4来运算,这是不允许的。

接下来再看一个例子:

var temp;
alert(temp);
alert(typeof temp);
alert(typeof temp2);
alert(temp==undefined);
alert(temp2==undefined);

在这个示例中:

第一个、第二个和第三个alert可以弹出提示undefined;但其实这三个undefined的含义是不一样的。在javascript中,undefined是一个类,这个类只有一个值就是undefined,第一个alert弹出的就是值undefined,第二个和第三个弹出的是undefined这个类名。

第四个alert会弹出true,这是一个判断。

第五个alert不会弹出,因为报错了。这里爆出的错误就是因为使用了没有定义的变量进行运算。爆出的错误是temp2 is not defined;(不同的浏览器可能说法不同)

JavaScript中undefined和is not defined异常

不解释,直接上代码:

console.log(xx);
console.log(window.xx);

(其中xx是一个不存在的变量)

当直接打印xx变量时,直接抛出一个is not defined异常并终止执行。

然而将xx变量以window.xx的形式打印出来时,缺直接输出一个undefined,并没有出现异常,可以继续执行。

查阅相关文档之后才知道,打印undefined说明该变量已经声明,但没有赋值;打印is not defined异常说明该变量连声明都没有。通过这条结论说明,window.xx的形式会在window对象中隐式的声明该变量。

这也说明了,为什么以下代码可以直接运行了。

window.xx = 2;
console.log(window.xx);

另外有个一个相关的问题,见代码:

function t1() {
    console.log(str2);  //undefined
    var str2 = 'mike';
}
t1();
和
function t1() {
    console.log(str2);  //is not defined
    str2 = 'mike';
}
t1();

第一种情况涉及到JavaScript的运行阶段,分为词法分析阶段和运行阶段,在词法分析阶段时,先声明了str2变量但没有赋值,所以在运行阶段就出现了undefined。

第二种情况在词法分析阶段也无法声明str2,因为没有var关键字声明,所以在运行阶段直接抛出异常。

还有一点需要注意的是,凡是没有使用var声明的变量,最终都会成为全局对象window的属性,如下代码:

function t1() {
    a = 10
    console.log(a);//10
    console.log(window.a);//10
}
t1();

总结

到此这篇关于JavaScript中undefined和is not defined区别与异常处理的文章就介绍到这了,更多相关js undefined和is not defined区别内容请搜索阿兔在线工具以前的文章或继续浏览下面的相关文章希望大家以后多多支持阿兔在线工具!

点赞(0)

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部