缓存对象项的完整路径然后将其用于分配是行不通的
Caching full path of an object item and then using it for assignation doesn't work
我有一个对象,每次函数运行时,我想要切换其中一个项目的值。如果我在var中缓存完整的路径,它不会工作,只有当我省略该项并缓存没有它的路径时,它才会像我期望的那样工作。
var foo1 = function (identifier) { // Does not work
var counting = some.object.with[identifier].counting;
counting = (!counting) ? "bar" : false; // Switch values
};
var foo2 = function (identifier) { // Work!
var identifier = some.object.with[identifier];
identifier.counting = (!identifier.counting) ? "bar" : false;
};
知道为什么吗?
在示例一中,您将原始属性存储在变量中,然后仅替换该局部变量的值。
在示例二中,您正在存储对对象的引用,然后更新该对象的属性。
在第一个示例中,您抓取的是值,而不是对象字段的引用,因此实际上您只是更改了一个变量,而不是对象字段本身。
所以,一个简单的例子是:var o = {a:1, b:2},
v = o.a;
console.log(v); //outputs 1
v = 3;
console.log(v); //outputs 3
console.log(o); //outputs {a:1, b:2} - since o wasn't changed directly
此外,检查值是否为false并不是一个好的做法,除非您打算考虑undefined
。也许用!!counting
转换为布尔值更好?
这是因为在第二种情况下,您将对象的引用分配给identifier
变量,因此您所做的任何更改都将更改被引用的对象。被引用对象的范围可能在函数foo2
之外,因此对象和所做的任何更改在调用之间继续存在。
相关文章:
- 将函数的上下文应用于javascript变量
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- keyup事件处理程序更改焦点不适用于快速键入
- 在循环中分配json值时,值被覆盖
- 动态分配GA增强型电子商务跟踪器
- JQueryhide()不适用于Mozzilla,但适用于Chrome
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- 如何分配数据切换=“;下拉菜单”;用于wordpress中的父链接
- Onbeforeunload-windows分配不'不适用于Chrome
- Jquery Mobile我有两个页面,一个用于Android,一个用于iPhone.如何检测浏览器并分配它们
- Javascript 用于将名称值对分配给对象的简写
- 为什么我的Javascript SWITCH语句不能用于HEX颜色分配
- 用于在加载时分配类的脚本
- 缓存对象项的完整路径然后将其用于分配是行不通的
- Jsplumber -在端点中分配两个不同的锚图像,一个用于源,一个用于目标
- Javascript逻辑运算符&&用于分配属性
- 外部分配值时,更改不适用于文本框的事件
- JavaScript -将名称空间分配给局部变量以用于构造函数,但不确定发生了什么
- 是否有一个JQuery API用于根据数字分配月份名称
- 循环的Javascript放置一个指针,而不是用于链接分配的变量的副本