Javascript-确定对象中是否存在任何作用域引用
我执行一些函数并得到一个返回值。此值可以是任何内容(字符串、数组、对象、引用、函数)。然后我使用Javascript-确定对象中是否存在任何作用域引用,javascript,json,object-type,Javascript,Json,Object Type,我执行一些函数并得到一个返回值。此值可以是任何内容(字符串、数组、对象、引用、函数)。然后我使用JSON.stringify传递这个结果 现在,函数和引用在它们被交付到的范围内没有多大用处,所以整个“to string,eval”方法没有多大用处。我将把它们存储在一个本地数组中,然后传递一个ID以供以后引用。但是,我确实继续发送字符串数据、数组和对象(在javascript对象的“关联数组”意义上),因为它们都能很好地处理JSON.stringify 我已经在使用尝试。。。JSON.string
JSON.stringify
传递这个结果
现在,函数和引用在它们被交付到的范围内没有多大用处,所以整个“to string,eval”方法没有多大用处。我将把它们存储在一个本地数组中,然后传递一个ID以供以后引用。但是,我确实继续发送字符串数据、数组和对象(在javascript对象的“关联数组”意义上),因为它们都能很好地处理JSON.stringify
我已经在使用尝试。。。JSON.stringify()catch
可以对递归对象执行此操作(其中JSON.stringify
错误处于启用状态),但这并不能解释上面提到的任何其他内容
检查值是否包含函数的最有效方法是什么
而不是
typeof foo === "function"
因为回报可能是
["foo", "bar", ["foo", "bar"], function(){...something}]
我也不想区分每一个单独的片段的类型,只是返回整体,看看是否有任何函数/对象不能安全地字符串化。我可能会想出如何循环和检查每个单独的值,但如果有人能想到一个快捷方式或更有效的方法,我想听听
谢谢 这不起作用 但我会留给任何想尝试的人。工作方案即将出台 30秒后,我自己想出来了 字符串,解析它。如果有什么改变,它就不等于它自己
var checkParse = function(obj){
return obj === JSON.parse(JSON.strigify(obj));
}
欢迎光临
//your favorite object length checking function could go here
$.objectLength = (function(){
//ie<9
if (typeof Object.keys === "undefined" ){
return function(o){
var count = 0, i;
for (i in o) {
if (o.hasOwnProperty(i)) {
count++;
}
}
return count;
};
//everyone else
} else {
return function(o){
return Object.keys(o).length;
}
}
})();
//comparing our two objects
$.checkMatch = function(a, b){
//if they're not the same length, we're done here. (functions exist, etc)
if (typeof a !== typeof b || typeof a === "object" && typeof b === "object" && a && b && $.objectLength(a) !== $.objectLength(b)){
return false;
//if they are the same length, they may contain deeper objects we need to check.
} else {
var key;
for (key in a){
//make sure it's not prototyped key
if (a.hasOwnProperty(key)){
//if it doesn't exist on the other object
if (!b.hasOwnProperty(key)){
return false;
//if this an object as well
} else if (typeof a[key] === "object"){
//check for a match
if (!$.checkMatch(a[key], b[key])){
return false;
}
//then check if they're not equal (simple values)
} else if (a[key] !== b[key]){
return false
}
}
}
return true;
}
};
//...stuff
//catch recursive objects in parameters
var good = true, sendObject = {"ourobject", "values"}, finalSendObject;
//try to stringify, which rejects infinitely recursive objects
try {
finalSendObject = JSON.stringify(sendObject);
} catch(e){
good = false;
}
//if that passes, try matching the original against the parsed JSON string
if (good && sendObject !== JSON.parse(finalSendObject)){
good = $.checkMatch(sendObject, JSON.parse(finalSendObject));
}
//您最喜欢的对象长度检查函数可以在这里使用
$.objectLength=(函数(){
//e返回值将始终为false
checkParse({})//false
现在测试它。你怎么想?如果它是说…一个字符串,我将它字符串化然后解析,它应该是相同的。相同的内容,不同的对象。这怎么会导致比较失败?它不是在寻找同一个对象,而是在寻找一个相同的对象。也许我误解了。你是在原语或对象上调用它还是在b上调用它在字符串上调用oth,它会起作用。在对象上它不会起作用。对于对象,正如我上面所说的,相同的内容,不同的对象。不同的对象意味着不相等。