美文网首页
undifined和xx is not difined区别和理解

undifined和xx is not difined区别和理解

作者: 扶得一人醉如苏沐晨 | 来源:发表于2022-11-21 09:12 被阅读0次

    概念上的解释:

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

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

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

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

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

    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();
    

    相关文章

      网友评论

          本文标题:undifined和xx is not difined区别和理解

          本文链接:https://www.haomeiwen.com/subject/zkolxdtx.html