最终参考文章:https://juejin.im/post/5aba32d9f265da239e4e1b6c
空值 (null):
-
var isNull = function (obj) { -
return obj === null; -
};
未定义 (undefined)
-
方法1(极力推荐) -
var isUndefined = function (obj) { -
return obj === void 0; -
} -
方法2(相对稳定) -
var isUndefined = function (obj) { -
return typeof obj === "undefined"; -
}
布尔值 (boolean)
-
var toString = Object.prototype.toString; -
var isBoolean = function (obj) { -
return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; -
}
数字 (number)
-
var toString = Object.prototype.toString; -
var isNumber = function (obj) { -
return toString.call(obj) === '[object Number]'; -
}
字符串 (string)
-
var toString = Object.prototype.toString; -
var isString = function (obj) { -
return toString.call(obj) === '[object String]'; -
}
对象 (object)
-
var toString = Object.prototype.toString; -
var isObject = function (obj) { -
var type = typeof obj; -
return type === 'function' || type === 'object' && !!obj; -
}
数组(Array)
-
最稳妥方法 -
Object.prototype.toString.call([1,2,3]) // "[object Array]"
============================== 我是一条分割线=====================================================
首先说下null与undefined区别:
对已声明但未初始化的和未声明的变量执行typeof,都返回"undefined"。
null表示一个空对象指针,typeof操作会返回"object"。
一般不显式的把变量的值设置为undefined,但null相反,对于将要保存对象的变量,应明确的让该变量保存null值。
-
var bj; -
alert(bj); //"undefined" -
bj = null; -
alert(typeof bj); //"object" -
alert(bj == null); //true -
bj = {}; -
alert(bj == null); //false
-
/* -
* 检测对象是否是空对象(不包含任何可读属性)。 -
* 方法既检测对象本身的属性,也检测从原型继承的属性(因此没有使用hasOwnProperty)。 -
*/ -
function isEmpty(obj) -
{ -
for (var name in obj) -
{ -
return false; -
} -
return true; -
};
这里所说的空对象,到底是 {}还是 null .我写了一个测试用例。
var a = {};
a.name = 'realwall';
console.log(isEmpty(a)); //false
console.log(isEmpty({})); //true
console.log(isEmpty(null)); //true
//注意参数为null时无语法错误哦,即虽然不能对null空指针对象添加属性,但可以使用for in语句。
-
/* -
* 检测对象是否是空对象(不包含任何可读属性)。 -
* 方法只既检测对象本身的属性,不检测从原型继承的属性。 -
*/ -
function isOwnEmpty(obj) -
{ -
for(var name in obj) -
{ -
if(obj.hasOwnProperty(name)) -
{ -
return false; -
} -
} -
return true; -
};
{}与null的区别:
这个东西很重要。
var a = {};
var b = null;
a.name = 'realwall';
b.name = 'jim'; //这里会报错,b为空指针对象,不能像普通对象一样直接添加属性。
b = a;
b.name = 'jim'; //此时 a和 b指向同一个对象。a.name, b.name均为'jam'
===================================我是分割线============================
做项目时遇到一个问题,判断一个对象是否为空对象,发现这样判断可以,上代码:
1. 代码1:
-
var a = {}; -
if(!a){ console.log(1);} -
else if(a == null) { console.log(2);} -
else { console.log(3);}
结果为:3
2. 代码2:
-
var b = {}; -
if(b == {}){ console.log(4);} -
if(b == '{}') { console.log(5);} -
if(typeof(b) == 'object') { console.log(6);}
结果为:6
3. 代码3:
-
var c = {}; -
if(JSON.stringify(c) == "{}"){ console.log(7);}
结果为: 7
所以可以使用代码3的方法判断对象是否为空对象{};
如果对象不为空,并且知道对象不为空时,某个属性(比如{id:111})一定存在,则可以里这样判断:
4. 代码4:
-
var d = {}; -
var e = {id:111}; -
if(d.id){ console.log(8);} -
if(e.id){ console.log(9);}
结果为:9
小结:显然代码3的判断方式比较“强势”,但效率明显不如代码4的判断方法
===================================我是分割线============================
补充:
文章:https://blog.csdn.net/FungLeo/article/details/78113661
-
function checkNullObj (obj) { -
return Object.keys(obj).length === 0 -
}
文章:https://blog.csdn.net/wen_3370/article/details/56496238
-
var exp = undefined; -
if (typeof(exp) == "undefined") -
{ -
alert("undefined"); -
} -
var exp = null; -
if (!exp && typeof(exp)!=”undefined” && exp!=0) -
{ -
alert(“is null”); -
}
我们在 DOM 应用中,一般只需要用 (!exp) 来判断就可以了,因为 DOM 应用中,可能返回 null,可能返回 undefined,如果具体判断 null 还是 undefined 会使程序过于复杂。
本文深入探讨了JavaScript中对象、数组、null与undefined的检测方法,包括如何判断对象是否为空,提供了多种实用的代码示例,如使用JSON.stringify进行对象空值检查。

3711

被折叠的 条评论
为什么被折叠?



