Javascript-确定对象中是否有任何作用域引用
Javascript - Determine if any scoped references in object
我执行一些函数并获得一个返回值。这个值可以是任何值(字符串、数组、对象、引用、函数)。然后我使用JSON.stringify
传递这个结果。
现在,函数和引用在它们被传递到的范围内对我没有多大好处,所以整个"to string,eval"方法用处不大。我将把它们存储在一个本地数组中,然后传递一个ID,以便稍后引用它们。但是,我确实继续发送字符串数据、数组和对象(在javascript对象的"关联数组"意义上),因为这些都可以很好地与JSON.stringify
配合使用。
我已经在使用try... JSON.stringify() catch
来处理递归对象(JSON.stringify
在其中出错),但这并不能解释上面提到的任何其他内容。
检查值是否包含函数的最有效方法是什么?
而不是
typeof foo === "function"
因为退货可能是
["foo", "bar", ["foo", "bar"], function(){...something}]
我也不想挑剔每一个单独部分的类型,只想从整体上返回是否有任何函数/对象无法安全地字符串化。我可能会想出如何循环和检查每个单独的值,但如果有人能想到一种快捷方式或更有效的方法,我很想听听
谢谢!
欢迎并感谢精制!
//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));
}
这将不起作用
但我会把它留给任何想尝试的人。工作解决方案很快就会到来。
30秒后,我自己想明白了。
字符串,解析它。如果有任何变化,它就不会等于它自己。
var checkParse = function(obj){
return obj === JSON.parse(JSON.strigify(obj));
}
相关文章:
- 监视函数从服务返回不起作用,但作用域函数起作用
- 将作用域存储在JSON中
- 从控制器继承了隔离的作用域以生成可重用的指令
- 从ng模板访问作用域
- 调用私有作用域
- 对父作用域的指令更新延迟了一步
- 正在$rootScope上达到控制器作用域$在内部控制器上
- 两个指令创建新的继承的和隔离的作用域-元素得到哪个
- 这两个关于 JavaScript 作用域链的例子有什么区别?
- 在具有命名作用域的自定义Polymer元素中隐藏表行
- AngularJS指令隔离作用域
- Angularjs:修改js中的作用域,稍后在页面中使用
- 访问多个指令的隔离作用域
- Javascript作用域和Ajax调用;工作不正常
- 向Angular作用域对象添加对象数组——TypeError
- Javascript-确定对象中是否有任何作用域引用
- q 从 .then 函数分配给更高级别的作用域变量是否存在任何陷阱
- AngularJS ng控制器指令不接受javascript中的变量(作用域函数),也不给出任何错误
- 具有隔离作用域的 AngularJS 指令 - 我真的必须在任何地方调用$parent
- Angular -任何更新作用域会导致页面滚动的原因