js typeof()的使用例子

【范围】typeof返回值范围:
typeof返回 值对应 数据的类型

String “string”
Number “number”
Boolean “boolean”
Undefined “undefined”
Object “object”
function函数对象 “function”
Symbol(ES6新增) “symbol”

【例子】

// Numbers
 代码   ————————> 结果
 
typeof 37 === 'number';
typeof 3.14 === 'number';
typeof Math.LN2 === 'number';
typeof Infinity === 'number';
typeof NaN === 'number'; // 尽管NaN是"Not-A-Number"的缩写
typeof Number(1) === 'number'; // 但不要使用这种形式!

// Strings
typeof "" === 'string';
typeof "bla" === 'string';
typeof (typeof 1) === 'string'; // typeof总是返回一个字符串
typeof String("abc") === 'string'; // 但不要使用这种形式!

// Booleans
typeof true === 'boolean';
typeof false === 'boolean';
typeof Boolean(true) === 'boolean'; // 但不要使用这种形式!

// Symbols
typeof Symbol() === 'symbol';
typeof Symbol('foo') === 'symbol';
typeof Symbol.iterator === 'symbol';

// Undefined
typeof undefined === 'undefined';
typeof declaredButUndefinedVariable === 'undefined';
typeof undeclaredVariable === 'undefined'; 

// Objects
typeof {a:1} === 'object';

// 使用Array.isArray 或者 Object.prototype.toString.call
// 区分数组,普通对象
typeof [1, 2, 4] === 'object';

typeof new Date() === 'object';

// 下面的容易令人迷惑,不要使用!
typeof new Boolean(true) === 'object';
typeof new Number(1) ==== 'object';
typeof new String("abc") === 'object';

// 函数
typeof function(){} === 'function';
typeof Math.sin === 'function';

//NaN
typeof 1/0 === 'NaN';



特殊中的特殊 
typeof 1/0; //NaN(这个NaN不是字符串类型,是数值类型)
typeof typeof 1/0; //NaN(这个NaN不是字符串类型,是数值类型)
typeof(1/0); //"number"
typeof typeof(1/0); //"string"
typeof(typeof 1/0); //"number"

【typeof为什么要区分object和function?】
答案一:《JavaScript高级程序设计》:从技术角度讲,函数在ECMAScript中是对象,不是一种数据类型。然而,函数也确实有一些特殊的属性,因此通过typeof操作符来区分函数和其他对象是有必要的。
答案二:在实际的使用过程中有必要区分Object和Function,所以在typeof这里实现了

【typeof的不足之处】
不能区分对象、数组、正则,对它们操作都返回"object";(正则特殊一点后面说)
Safar5,Chrome7之前的版本对正则对象返回 ‘function’
在IE6,7和8中,大多数的宿主对象是对象,而不是函数;如:typeof alert;

猜你喜欢

转载自blog.csdn.net/nefu__lian/article/details/107016778