zoukankan      html  css  js  c++  java
  • JavaScript的undefined

    我们知道,javascript是一种泛类型的语言。泛类型意味着不必显式定义变量的数据类型。事实上,我们无法在 javascript 上明确地定义数据类型。而只能通过var语句显示声明变量:var myvar;
    或这样隐式声明变量:myvar=myvarValue(省略var,在声明的同时初始化)。

    javascript有三种基本数据类型(字符串、数值、布尔 ),两种引用数据类型(对象、数组)和两种特殊数据类型(Null 、Undefined )。对于基本数据类型和引用数据类型我们很好理解。对于特殊数据类型Null和Undefined,常常会引起我们的一些疑惑。

    在 Javascript 中数据类型 Null 只有一个值:null。如果一个变量的值为null ,那么表示该变量没有保存有效的数、字符串、Boolean、数组或对象,null与vbscript中Empty的概念不相同(Empty指未初始化的变量值)。因此,我们可以通过给一个变量赋 null 值来清除变量的内容。

    考查下面的代码:

    function test1()
    {
     var a=null;
     alert("typeof(a):"+typeof(a));
     alert("a==0:"+(a==0));
    }

    结果显示:typeof(null)返回的对象类型为Object,而非类型null。这点潜在的混淆是为了向下兼容。同时,在 Javascript 中,null 与 0 不相等。

    如果已声明了一个变量但还没有初始化,那么该变量的值就是 undefined。这与vbscript中Empty的概念是相同的。

    如下情况使返回 undefined 值:
    1、对象属性不存在;
    2、声明了变量但从未赋值。

    //注意:很多人常犯的一个错误是:当他定义一个变量的时候未初始化,想当然地认为该变量的默认值为数字0字符串""。

    我们在javascript中如何判断一个变量是否存在,可以使用如下方法:

    function test2()
    {
     var a;
     alert(typeof(a)==undefined);//false
     alert(typeof(a)=="undefined");//true
     alert(a==undefined);//true
    }


    //注意:我们可以通过与undefined做比较测试一个变量是否初始化,但不能通过与 undefined 做比较来测试一个变量是否存在,而只能通过typeof(variable)=="undefined"来判断!

    下面的例子将证明我的这一提示的正确性:

    function test3()
    {
     var a;
     //alert(b==undefined);//出现错误:'b'未定义
     alert(typeof(b)=="undefined");//true
    }

    undefined 值与null做比较,考查下面的代码:

    <script language="javascript">
    function myObject(prop1,prop2)
    {
     this.prop1=prop1;
     this.prop2=prop2;
    }
    var myObj=new myObject(null,"test");
    alert("myObj.prop1==null:"+(myObj.prop1==null));
    alert("myObj.prop1==undefined:"+(myObj.prop1==undefined));
    alert("myObj.prop2==undefined:"+(myObj.prop2==undefined));
    alert("myObj.prop3==undefined:"+(myObj.prop3==undefined));

    var myobjProps="";
    for(prop in myObj)
     myobjProps+=prop+",";
    alert("myObject的属性有:"+myobjProps);

    alert("myObject.prop3 exists?:"+(("prop3" in myObj)?"YES":"NO"));
    //要检查一个对象属性是否存在,可以in 运算符。
    </script>

    总结:undefined 值与null做比较,如下情况时,比较的结果为 true:
    1、属性 myObj.prop1 包含null 值;
    2、属性 myObj.prop3 不存在。

  • 相关阅读:
    pandas 移动列的方法
    D-Link 路由器新漏洞,黑客可远程执行任意命令
    世界第一黑客:未来云安全的威胁
    黑客针对参与Covid-19疫苗分发的公司
    iPhone为盲人自动识别并标记按钮和UI功能
    小心!基于UEFI引导的病毒,重装系统也清除不了
    美国禁用面部识别技术,到底是什么原因?
    Apple的双向无线充电器现已上市,预计最快在本周发货
    警惕黑客通过打印机侵入你的系统
    为什么未来没有密码?黑客还能破解吗?网友:同样危险
  • 原文地址:https://www.cnblogs.com/AndyGe/p/1788838.html
Copyright © 2011-2022 走看看