日期:2014-05-16  浏览次数:20538 次

关于理解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>

?

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