Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这是JavaScript中通过引用传递的一种迂回方式吗?_Javascript - Fatal编程技术网

这是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

我读到这篇文章是关于如何通过引用JavaScript中的函数来潜在地传递原语的。乍一看,它似乎可以工作,但我想知道它可能会带来什么潜在的陷阱

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哈哈。。。并不是他发布的代码不起作用,只是它并没有真正做到他所说的。反正这也不是什么大不了的事;从实际意义上讲,缺少传递引用并不是一个真正的问题。关于字符串的观点很好。因为我们实际上不能通过引用传递,所以上面只是尝试模拟它,而使用字符串就是这种方法在博客文章中显示的方式。