这是JavaScript中通过引用传递的一种迂回方式吗?
我读到这篇文章是关于如何通过引用JavaScript中的函数来潜在地传递原语的。乍一看,它似乎可以工作,但我想知道它可能会带来什么潜在的陷阱这是JavaScript中通过引用传递的一种迂回方式吗?,javascript,Javascript,我读到这篇文章是关于如何通过引用JavaScript中的函数来潜在地传递原语的。乍一看,它似乎可以工作,但我想知道它可能会带来什么潜在的陷阱 function modifyVar(obj, val) { obj.valueOf = obj.toSource = obj.toString = function(){ return val; }; } var myString = 'old string'; console.log(myString); // logs "old strin
function modifyVar(obj, val) {
obj.valueOf = obj.toSource = obj.toString = function(){ return val; };
}
var myString = 'old string';
console.log(myString); // logs "old string"
myString = Object(myString); // convert to object
modifyVar(myString, 'new string');
myString = myString.valueOf(); // Was not in blog post. Added to return to primitive
console.log(myString); // logs "new string"
不,不是。要模拟对不可修改对象的修改(即使Javascript是通过引用传递的,字符串也是不可变的)。一种更简洁的方法是传递对象并修改其属性。例如
function modifyVar(obj, val) {
obj.myString = val
}
var obj = {myString: "Old string"};
console.log(obj.myString); // Old String
modifyVar(obj, "New String");
console.log(obj.myString); // New String
您不能在JavaScript中引入引用传递语义(不改变语言规范)。实际上,这看起来不像是通过引用传递变量。你应该先解释一下为什么你想做这样的事情?试图让一种语言以一种它不需要的方式来表现,这通常是灾难即将来临的征兆。而且,那篇博客文章是错误的。@CleverGirl哈哈。。。并不是他发布的代码不起作用,只是它并没有真正做到他所说的。反正这也不是什么大不了的事;从实际意义上讲,缺少传递引用并不是一个真正的问题。关于字符串的观点很好。因为我们实际上不能通过引用传递,所以上面只是尝试模拟它,而使用字符串就是这种方法在博客文章中显示的方式。