typeof 是运算符,注意不是函数,是运算符,其作用,是考察变量究竟是什么类型。或曰,是变量是否定义或是否初始化的照妖镜。返回值是字符串。
undefined 表示一个对象没有被定义或者没有被初始化。
null 表示一个尚未存在的对象的占位符。
测试一,变量没有定义的时候,只能使用 typeof
- <input type="button" id="btnTest" οnclick="Test()" value="测试" />
- <script type="text/javascript">
- function Test() {
- alert(i == null); //报错
- alert(i == undefined); //报错
- alert(typeof i == "undefined"); //true
- }
- </script>
测试二,变量有定义,但未初始化,typeof,undefined,null都可以使用
- <script type="text/javascript">
- function Test() {
- var i;
- alert(i == null); //true
- alert(i == undefined); //true
- alert(typeof i == "undefined"); //true
- i = 0;
- alert(i == null); //false
- alert(i == undefined); //false
- alert(typeof i == "undefined"); //false
- }
- </script>
测试三,函数参数跟变量类似
1、没有参数
- <input type="button" id="btnTest" οnclick="Test()" value="测试" />
- <script type="text/javascript">
- function Test(i) {
- alert(i == null); //true
- alert(i == undefined); //true
- alert(typeof i == "undefined"); //true
- }
- </script>
2、有参数
- <input type="button" id="btnTest" οnclick="Test(0)" value="测试" />
- <script type="text/javascript">
- function Test(i) {
- alert(i == null); //false
- alert(i == undefined); //false
- alert(typeof i == "undefined"); //false
- }
- </script>
要时刻铭记typeof返回的是字符串,应该使用字符串比较:
//var oTemp; 注释掉变量声明语句 if(typeof oTemp ==”undefined”){…};//true
下面是typeof运算符对各类型的返回结果:
w undefined:“undefined” w null:“object” w string:“string” w number:“number” w boolean:“Boolean” w function:“function” w object:“object”
结果只有null类型让人吃惊。null类型返回object,这其实是JavaScript最初实现的一个错误,然后被ECMAScript沿用了,也就成为了现在的标准。所以需要将null类型理解为“对象的占位符”,就可以解释这一矛盾,虽然这只是一中 “辩解”。对于代码编写者一定要时刻警惕这个“语言特性”,因为:
alert(typeof null == “null”);//输出 false
永远为false。
还要提醒,一个没有返回值的function(或者直接return返回)实际上返回的是undefined。
function voidMethod() { return; } alert(voidMethod()); //输出 "undefined"