关于了解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>
如果讲得有错误,欢迎纠正!