我有一个需要循环的嵌套JSON对象,每个键的值可以是字符串、JSON数组或其他JSON对象。根据对象的类型,我需要执行不同的操作。是否有任何方法可以检查对象的类型,以查看它是字符串、JSON对象还是JSON数组?
我尝试使用typeof
和exjectof
,但两者似乎都不起作用,因为typeof
将为JSON对象和数组返回一个对象,并且当我执行obj json实例
时,instanceof
会给出一个错误。
更具体地说,在将JSON解析为JS对象后,是否有任何方法可以检查它是普通字符串,还是具有键和值的对象(来自JSON对象),还是数组(来自JSON数组)?
例如:
JSON
var data = "{'hi':
{'hello':
['hi1','hi2']
},
'hey':'words'
}";
示例JavaScript
var jsonObj = JSON.parse(data);
var path = ["hi","hello"];
function check(jsonObj, path) {
var parent = jsonObj;
for (var i = 0; i < path.length-1; i++) {
var key = path[i];
if (parent != undefined) {
parent = parent[key];
}
}
if (parent != undefined) {
var endLength = path.length - 1;
var child = parent[path[endLength]];
//if child is a string, add some text
//if child is an object, edit the key/value
//if child is an array, add a new element
//if child does not exist, add a new key/value
}
}
如何执行如上所示的对象检查?
JSON对象是一个对象。要检查类型是否是对象类型,请评估构造函数属性。
function isObject(obj)
{
return obj !== undefined && obj !== null && obj.constructor == Object;
}
这同样适用于所有其他类型:
function isArray(obj)
{
return obj !== undefined && obj !== null && obj.constructor == Array;
}
function isBoolean(obj)
{
return obj !== undefined && obj !== null && obj.constructor == Boolean;
}
function isFunction(obj)
{
return obj !== undefined && obj !== null && obj.constructor == Function;
}
function isNumber(obj)
{
return obj !== undefined && obj !== null && obj.constructor == Number;
}
function isString(obj)
{
return obj !== undefined && obj !== null && obj.constructor == String;
}
function isInstanced(obj)
{
if(obj === undefined || obj === null) { return false; }
if(isArray(obj)) { return false; }
if(isBoolean(obj)) { return false; }
if(isFunction(obj)) { return false; }
if(isNumber(obj)) { return false; }
if(isObject(obj)) { return false; }
if(isString(obj)) { return false; }
return true;
}
您可以使用数组。isArray检查数组。然后,对象的类型=='字符串',对象的类型=='对象'。
var s = 'a string', a = [], o = {}, i = 5;
function getType(p) {
if (Array.isArray(p)) return 'array';
else if (typeof p == 'string') return 'string';
else if (p != null && typeof p == 'object') return 'object';
else return 'other';
}
console.log("'s' is " + getType(s));
console.log("'a' is " + getType(a));
console.log("'o' is " + getType(o));
console.log("'i' is " + getType(i));
's' 是字符串
'a' 是数组
'o' 是对象
'i' 是其他
我会检查构造函数属性。
例如。
var stringConstructor = "test".constructor;
var arrayConstructor = [].constructor;
var objectConstructor = ({}).constructor;
function whatIsIt(object) {
if (object === null) {
return "null";
}
if (object === undefined) {
return "undefined";
}
if (object.constructor === stringConstructor) {
return "String";
}
if (object.constructor === arrayConstructor) {
return "Array";
}
if (object.constructor === objectConstructor) {
return "Object";
}
{
return "don't know";
}
}
var testSubjects = ["string", [1,2,3], {foo: "bar"}, 4];
for (var i=0, len = testSubjects.length; i < len; i++) {
alert(whatIsIt(testSubjects[i]));
}
编辑:添加了空检查和未定义检查。
问题内容: 我有一个需要循环通过的嵌套JSON对象,每个键的值可以是String,JSON数组或另一个JSON对象。根据对象的类型,我需要执行不同的操作。有什么方法可以检查对象的类型以查看它是String,JSON对象还是JSON数组? 我尝试使用和,但似乎都没有用,因为这将为JSON对象和数组都返回一个对象,并且在我这样做时给出错误。 更具体地说,在将JSON解析为JS对象之后,有什么方法可以检
问题内容: 我试图得到: 在我自己的脚本中,我以前只是使用它,因为我从来不需要作为属性: 因此,对于第二个对象,我想出了以下方法作为一种快速解决方案-大部分都能奏效。;) 问题是,这取决于浏览器是否强制执行只读属性,而并非所有人都这样做。 有没有好的替代品? 问题答案: 这可能很有趣: 它是DOM Level2的一部分。 更新2 :这是我在自己的库中实现它的方式:(以前的代码在Chrome中不起作
问题内容: 我正在尝试编写一个接受字符串列表或单个字符串的函数。如果它是一个字符串,那么我想将其转换为仅包含一项的数组,因此我可以遍历它而不必担心错误。 那么,如何检查变量是否为数组? 我整理了以下各种解决方案,并创建了jsperf测试。它们都非常快,因此只需使用- 现在得到了很好的支持,并且可以跨框架使用。 问题答案: 在现代浏览器中,您可以 受Chrome5,Firefox 4.0,IE 9,
问题内容: 我的服务器端代码返回一个值,该值成功时为json对象,失败时为字符串’false’。现在如何检查返回的值是否为json对象? 问题答案: 如果字符串是JSON,则jQuery.parseJSON()应该返回类型为“对象”的对象,因此您只需使用以下命令检查类型
本文向大家介绍JavaScript / Typescript对象是否为空检查?,包括了JavaScript / Typescript对象是否为空检查?的使用技巧和注意事项,需要的朋友参考一下 对于null检查,可以使用!健康)状况。 示例 以下是代码- 要运行以上程序,您需要使用以下命令- 在这里,我的文件名为demo305.js。 输出结果 这将产生以下输出-
问题内容: 有没有一种快速的方法来检查对象是jQuery对象还是本机JavaScript对象? 例: 显然,上面的代码有效,但并不安全。您可能会向对象添加选择器键并获得相同的结果。有没有更好的方法来确保该对象实际上是jQuery对象? 符合 问题答案: 您可以使用运算符: 说明 :该函数(又名)被实现为构造函数。构造函数将以前缀调用。 调用时,内部jQuery将此转换为1。JavaScript继续