下面都对变量test的值进行说明。有一点可以先说明的是,typeof的值始终只有这样几个:“number”、“string”、“Boolean”、“object”、“function”和“undefined”、“unknown”。
注意,typeof为“unknown”的情况特别罕见,在微软的文档中几乎没有提到,笔者也是在“typeof TdcObj.recordset.recordcount”的时候才发现这个特例的。
而对象的constructor属性值则视情况而论。
typeof和constructor的比较
变 量 | typeof 返回的都是 String 串 | constructor 返回的是对象 | 其他说明 |
// 这里省略了 ( ) var test = new Object; // 上面等同于 var test = {}; | object | Object | 任何自定义对象 (Object) 的 typeof 都是 object |
var test = new Array(123,456); // 上面等同于 var test = [123,456]; | object | Array |
|
var test = function(){}; // 上面等同于 var test = new Function(); | Function | Function | 但是请注意,如果是 var oT = new test(); 则 typeof oT 等于 object |
function fnMyTest(){} // 这里省略了 () var test = new fnMyTest;
| object | fnMyTest | 要特别注意的是,自定义函数的 constructor 等于这个定义的函数对象,又,例如: (new Date).constructor 等于 Date ,它的 typeof 等于 object |
var test = null; | object | 发生错误,无法获取 constructor ,虽然它的 tyepof 是“ object ”,这就是它的特殊性 | 这种情况是非常特殊的,读者朋友要特别小心。在程序运行过程中常常会发生这样的情况的,在你并不知道已经为 null 的情况下却还在求 test.constructor 的内容 |
var test = undefined; | undefined | 同 null 一样,会发生错误,因为它不是一个有效的变量或对象 |
|
var test = 9897; | number | Number |
|
var test = “My Test String”; | string | String |
|