您好,欢迎来到上海分类信息网
免费发信息

JS中的typeof和类型判断

2024-5-27 13:32:20发布5次查看ip:发布人:
typeof
ecmascript 有 5 种原始类型(primitive type),即 undefined、null、boolean、number 和 string。我们都知道可以使用typeof运算符求得一个变量的类型,但是对引用类型变量却只会返回object,也就是说typeof只能正确识别基本类型值变量。
var a = abc;typeof a;// stringvar b = 123;typeof b;// numbervar c = true;typeof c;// booleanvar d = null;typeof d;// objectvar f = undefined;typeof f;// undefinedvar g;typeof g;// undefinedtypeof x;// object
您也许会问,为什么 typeof 运算符对于 null 值会返回 object。这实际上是 javascript 最初实现中的一个错误,然后被 ecmascript 沿用了。现在,null 被认为是对象的占位符,从而解释了这一矛盾,但从技术上来说,它仍然是原始值。
最后一个比较奇怪,typeof一个不存在的变量x居然返回了object而不是undefined。
我们在来如下代码
var a = function() {};typeof a; // functionvar b = [1,2,3];typeof b; // objectvar c = {};typeof c; // object
对于数组和对象都返回object,因此我们日常开发中一个常见需求就是如何判断变量是数组还是对象。
类型判断
类型判断,一般就是判断是否是数组,是否是空对象。这是针对这个需求,我日常用过或见过的判断方法
判断是否是数组
有数组:var a = [1,2,3,4,5];
方法一:
tostring.call(a); // [object array]
方法二:
a instanceof array; //true
方法三:
a.constructor == array; //true
第一种方法比较通用,也就是object.prototype.tostring.call(a)的简写。
instanceof和constructor判断的变量,必须在当前页面声明的,比如,一个页面(父页面)有一个框架,框架中引用了一个页面(子页面),在子页面中声明了一个a,并将其赋值给父页面的一个变量,这时判断该变量,array == object.constructor会返回false;
判断是否是空对象
有变量:var obj = {};
json.stringify(obj); // {}
通过转换成json对象来判断是否是空大括号
if(obj.id){ //如果属性id存在....}
这个方法比较土,大多数人都能想到,前提是得知道对象中有某个属性。
function isemptyobject(e) { var t; for (t in e) return !1; return !0 } //trueisemptyobject(obj); //falseisemptyobject({ a:1, b:2});
这个方法是jquery的isemptyobject()方法的实现方式。
┏━━━━━━━━━━━━┓
┃打出“php”
┃选第一个
┃发到评论
┃看看你打出来的是什么
┗━━━━━━━━━━━━
该用户其它信息

VIP推荐

上海分类信息网-上海免费发布信息-上海新闻网