您的位置:首页 > Web前端 > JavaScript

关于javascript的typeof

2013-12-23 11:31 417 查看
开始看jQuery的源码,碰到typeof突然有点蒙,看完书就忘真是伤不起。用谷歌百度了下,大概了解了一点。

功能:检测数据类型

用法:由于是操作符,typeof x 或者 typeof(x) 均可

返回值:字符串

alert(typeof 1);        //number
alert(typeof "123");    //string
alert(typeof true);     //boolean
alert(typeof undefined);//undefined
alert(typeof document); //object
alert(typeof null);     //object
var x = function(){};
alert(typeof x);        //function


一、数字类型

常规与非常规数字类型都返回number

表示数值范围的特殊数字类型:

Number.MIN_VALUE ——ECMAScript能够表示的最小数值

Number.MAX_VALUE ——ECMAScript能够表示的最大数值

Infinity——正无穷,超出范围的数值自动转成Infinity or -Infinity

其他特殊数字类型:

NaN——非数值

Number.POSITIVE_INFINITY——表示正无穷大

Number.NEGATIVE_INFINITY——表示负无穷大

二、返回undefined的情况

在变量未声明,或变量的值为undefined时,typeof将返回"undefined",以此检查变量是否存在,是否有值。

下面这种方法也可检测,但当变量未声明时,会抛出异常

variable === undefined


三、关于 typeof null 返回"object"
这是由于null被认为是一个空的对象引用。因此如果要检测一个值是否被定义,可以不使用typeof而用下面函数代替:

function isDefined(x){
return x !== null && x !==undefined;
}


四、原始值和对象引用

原始值:数字、布尔值、字符串、undefined、null

对象值:所有非原始值

详见JavaScript:如何判断值的类型

检测值是否为对象值,可用下面的函数:

function isObj(x){
return typeof x === "function"
|| (typeof x === "object" && x !== null);
}

由于上述方法比较复杂,也可用下面的函数检测:

function isObj2(x){
return x === Object(x);
}

检测原始值类型,要注意typeof null 返回 "object",用下面的函数可修复:

function getPrimitiveTypeName(x) {
var typeName = typeof x;
switch(typeName) {
case "undefined":
case "boolean":
case "number":
case "string":
return typeName;
case "object":
if (x === null) {
return "null";
}
default: // 前面的判断都没通过
throw new TypeError("参数不是一个原始值: "+x);
}
}


五、默认值运算符

参考文章中提到一个默认值运算符,完全没见过,这里补充进来加深记忆

在判断值既不等于undefined也不等于null时,可以用到此运算符:

myValue ?? defaultValue

等价于

(myValue !== undefined && myValue !== null) ? myValue : defaultValue

在访问一个嵌套的属性时,可能会用到:

obj.foo.bar


如果obj或者obj.foo未定义,上面的表达式就会抛出异常,这时使用.??可以让上面的表达式在遍历一层一层的属性时,返回第一个遇到的值为undefined或null的属性:

obj.??foo.??bar

等价于:

(obj === undefined || obj === null) ? obj
: (obj.foo === undefined || obj.foo === null) ? obj.foo
: obj.foo.bar


参考文章:

JavaScript:typeof的用途

JavaScript中typeof知多少?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javascript typeof