关于了解JS中typeof和eval函数的代码测试

关于理解JS中typeof和eval函数的代码测试

还是由于最近项目中接触到此类js,不是太了解,所以自行敲入了如下代码,自我进行测试,并了解它们。其中部分代码并非原创,有的是直接拷贝网上的。

 

<script type="text/javascript">

/**

 eval函数接收一个参数s,如果s不是字符串,则直接返回s。否则执行s语句。

  如果s语句执行结果是一个值,则返回此值,否则返回undefined
**/

 var query = function() {
            alert("====");
        }
        var node1 = "query";
        var node2 = 8;
        var node3;
        var MM = "My";
        var just = eval(node1);  

        alert(just);
        alert(eval(node2));   // 输出 8
        alert(eval(node3));   //输出 undefined      
        alert(eval("MM"));    //输出 My

        var him,tom,jom;
        him = "query";
        jom = true;
        alert(typeof tom == "function"); //输出false,因为此处tom还不是function类型
        alert(typeof jom == "boolean");  //输出为true,因为jom为boolean类型
        tom = eval(him);   //eval函数根据参数him为string类型,其值为query,则执行query函数,把query function赋给tom,即tom也是function函数了
        alert(typeof (tom));  //输出function  即输出tom的类型
        alert(typeof tom == "function");  //输出true,此处应理解为问tom的类型是否是function类型,为true
        alert(tom == "function");   //输出false,此处应该理解为问tom的值是否为字符串“function”,tom是function函数,值不是字符串,所以为false
        alert(typeof (tom == "function")); //输出boolean,因为tom=="function"为false,false为布尔类型,输出false的类型,即boolean
    </script>
   
    <script type="text/javascript">
        /**
        typeof返回一个表达式的数据类型的字符串,返回结果为js基本的数据类型,
        包括number,boolean,string,object,undefined,function.语法为typeof(data) 或 typeof data
   
        instanceof则为判断一个对象是否为某一数据类型,或一个变量是否为一个对象的实例;返回boolean类型
        语法为 o instanceof A
        **/
        alert("typeof(1):" + typeof(1));//number
        alert("typeof(\"abc\"):" + typeof("abc"));//string
        alert("typeof(true):" +typeof(true));//boolean
        alert("typeof(2009-2-4):" + typeof(2009-2-4));//number
        alert("typeof(\"2009-2-4\"):" + typeof("2009-2-4"));//string
        alert("typeof(m):" + typeof(m));//undefined
        var d=new Date();
        alert("typeof(d):" + typeof(d));//object
        function Person(){};
        alert("typeof(Person):" + typeof(Person));//function
        var a=new Array();
        alert("typeof(a):" + typeof(a));//object
        alert("a instanceof Array:" + (a instanceof Array));
        var h=new Person();
        var o={};
        alert("h instanceof Person:" + (h instanceof Person));//true
        alert("h instanceof Object:" + (h instanceof Object));//true
        alert("o instanceof Object:" + (o instanceof Object));//true
        alert(typeof (h)); //object
       
        /**
        js中constructor较少使用,如果不是搜索到相关construtor相关的资料,我之前从没有注意到js还有这个函数。
        使用typeof的一个不好的地方就是它会把Array还有用户自定义函数都返回为object
        **/
        var j=2;
        alert(typeof(j));//number
        alert("j.constructor:" + j.constructor);//function …
        alert(typeof(j.constructor));//function

    </script>

 

如果讲得有错误,欢迎纠正!