Hướng dẫn does javascript pass strings by reference? - javascript có chuyển chuỗi theo tham chiếu không?

Tôi muốn tạo một chuỗi và chuyển nó bằng tham chiếu sao cho tôi có thể thay đổi một biến duy nhất và có sự truyền bá đó đến bất kỳ đối tượng nào khác tham chiếu nó.

Lấy ví dụ này:

function Report(a, b) {
    this.ShowMe = function() { alert(a + " of " + b); }
}

var metric = new String("count");
var a = new Report(metric, "a"); 
var b = new Report(metric, "b"); 
var c = new Report(metric, "c"); 
a.ShowMe();  // outputs:  "count of a";
b.ShowMe();  // outputs:  "count of b";
c.ShowMe();  // outputs:  "count of c";

Tôi muốn có thể có điều này xảy ra:

var metric = new String("count");
var a = new Report(metric, "a"); 
var b = new Report(metric, "b"); 
var c = new Report(metric, "c"); 
a.ShowMe();  // outputs:  "count of a";
metric = new String("avg");
b.ShowMe();  // outputs:  "avg of b";
c.ShowMe();  // outputs:  "avg of c";

Tại sao điều này không hoạt động?

Tham chiếu MDC trên các chuỗi cho biết số liệu là một đối tượng.

Tôi đã thử điều này, đó không phải là điều tôi muốn, nhưng rất gần:

var metric = {toString:function(){ return "count";}};
var a = new Report(metric, "a"); 
var b = new Report(metric, "b"); 
var c = new Report(metric, "c"); 
a.ShowMe();  // outputs:  "count of a";
metric.toString = function(){ return "avg";}; // notice I had to change the function
b.ShowMe();  // outputs:  "avg of b";
c.ShowMe();  // outputs:  "avg of c";

alert(String(metric).charAt(1)); // notice I had to use the String constructor
// I want to be able to call this: 
// metric.charAt(1)

Những điểm quan trọng ở đây:

  1. Tôi muốn có thể sử dụng số liệu giống như nó là một đối tượng chuỗi bình thườngmetric like it's a normal string object
  2. Tôi muốn mỗi báo cáo tham khảo cùng một đối tượng.

Trong JavaScript, chúng tôi có các chức năng và chúng tôi có các đối số mà chúng tôi chuyển vào các chức năng đó. Nhưng làm thế nào JavaScript xử lý những gì bạn đi qua không phải lúc nào cũng rõ ràng. Không có "vượt qua tham chiếu" cho bất kỳ biến nào trong JavaScript. Tất cả các biến và đối số được gán theo giá trị, nhưng đối với các đối tượng, giá trị của biến là một tham chiếu. Bởi vì điều này, khi bạn vượt qua một đối tượng và thay đổi các thành viên của nó, những thay đổi đó vẫn tồn tại bên ngoài chức năng. Điều này làm cho nó trông giống như vượt qua bởi tài liệu tham khảo. Vì vậy, các giá trị nguyên thủy như số, chuỗi, boolean được truyền theo giá trị trong khi các đối tượng và mảng được truyền qua tham chiếu như ở trên.JavaScript , we have functions and we have arguments that we pass into those functions. But how JavaScript handles what you're passing in is not always clear. There is no "pass by reference" for any variable in JavaScript. All variables and arguments are assigned by value, but for objects the value of the variable is a reference. Because of this, when you pass an object and change its members, those changes persist outside of the function. This makes it look like pass by reference . So, Primitive values like number, string, boolean are passed by value while Objects and arrays are passed by reference like above said.

Với các loại dữ liệu nguyên thủy

Trong trường hợp các loại dữ liệu nguyên thủy, nếu bạn thay đổi giá trị của loại dữ liệu nguyên thủy bên trong hàm, thay đổi này sẽ không ảnh hưởng đến biến trong phạm vi bên ngoài. Điều này có nghĩa là bất kỳ thay đổi nào đối với biến đó trong khi trong hàm hoàn toàn tách biệt với bất cứ điều gì xảy ra bên ngoài chức năng. Chúng ta hãy xem ví dụ sau:Primitive Data Types , if you change the value of a Primitive Data Type inside a function, this change won't affect the variable in the outer scope. This means that any changes to that variable while in the function are completely separate from anything that happens outside the function. Let's take a look at the following example:

Trong ví dụ trên, chúng tôi đang thay đổi biến "hôm nay" bên trong hàm đã thay đổi và hiển thị nó sau khi gọi hàm, nó vẫn có giá trị "Chủ nhật". Điều này là do khi các loại nguyên thủy được truyền bởi giá trị. Điều này có nghĩa là bất kỳ thay đổi nào đối với biến đó trong khi trong hàm hoàn toàn tách biệt với bất cứ điều gì xảy ra bên ngoài chức năng. Đây là những gì có nghĩa là khi chúng ta nói rằng chúng ta đang chuyển qua giá trị trong JavaScript."toDay" variable inside of the function changeDay, and display it after calling the function, it still has the value "Sunday" . This is because when primitive types are passed by value. This means that any changes to that variable while in the function are completely separate from anything that happens outside the function. This is what is meant when we say we are passing by value in JavaScript.

Với các đối tượng

Trong trường hợp của các đối tượng, nếu bạn thay đổi giá trị của một thuộc tính đối tượng bên trong hàm, thay đổi này sẽ ảnh hưởng đến biến trong phạm vi bên ngoài. Tất cả các biến và đối số được truyền theo giá trị, nhưng đối với các đối tượng, giá trị của biến là một tham chiếu. Chuyển bằng tham chiếu liên quan đến việc có hai tài liệu tham khảo trỏ đến cùng một đối tượng trong bộ nhớ. Điều này có nghĩa là bạn có thể biến đổi và đối tượng hoặc chức năng bằng cách gán nó cho một đối tượng khác hoặc chuyển nó dưới dạng tham số cho một hàm. Chúng ta hãy xem ví dụ sau:Objects , if you change the value of an Object property inside a function, this change will affect the variable in the outer scope . All variables and arguments are passed by value, but for objects the value of the variable is a reference. Passing by reference involves having two references point to the same object in memory. This means you can mutate and object or function by assigning it to another object or passing it as a parameter to a function. Let's take a look at the following example:

Trong ví dụ trên, chúng tôi đang thay đổi biến "ngày nay" bên trong hàm đã thay đổi và hiển thị nó sau khi gọi hàm, giá trị của ngày hôm nay được thay đổi thành "Thứ Hai". Điều này là do khi bạn chuyển một đối tượng vào hàm, bạn sẽ không chuyển một bản sao. Bạn đang chuyển tài liệu tham khảo chỉ vào đối tượng này. Vì vậy, khi bạn thay đổi một thuộc tính của đối tượng đó trong hàm, bạn đang thay đổi thuộc tính của đối tượng trong phạm vi bên ngoài."toDay" variable inside of the function changeDay, and display it after calling the function, the value of toDay is changed to "Monday" . This is because when you pass an object into the function, you are not passing a copy. You are passing reference that points to the thisWeek object. So when you change a property of that object in the function, you are changing the property of the object in the outer scope .

Hiểu được sự khác biệt giữa truyền qua giá trị và thông qua tham chiếu là chìa khóa để hiểu cách các đối tượng và nguyên thủy JavaScript hoạt động.pass by value and pass by reference is key to understanding how JavaScript objects and primitives work.



Trong bài đăng này, chúng tôi sẽ xem xét vượt qua giá trị và vượt qua tham chiếu trong JavaScript.

Hãy cùng xem những gì được truyền qua giá trị và vượt qua tham chiếu trước khi xem xét bối cảnh JavaScript của nó.

Vượt qua giá trị:

Trong Pass by giá trị, hàm được gọi bằng cách truyền trực tiếp giá trị của biến làm đối số. Thay đổi đối số bên trong hàm không ảnh hưởng đến biến được truyền từ bên ngoài hàm.

JavaScript luôn vượt qua giá trị để thay đổi giá trị của biến không bao giờ thay đổi nguyên thủy cơ bản (chuỗi hoặc số). so changing the value of the variable never changes the underlying primitive (String or number).

function callByValue(varOne, varTwo) { 
console.log("Inside Call by Value Method");
varOne = 100;
varTwo = 200;
console.log("varOne =" + varOne +"varTwo =" +varTwo);
}
let varOne = 10;
let varTwo = 20;
console.log("Before Call by Value Method");
console.log("varOne =" + varOne +"varTwo =" +varTwo);
callByValue(varOne, varTwo) console.log("After Call by Value Method");
console.log("varOne =" + varOne +"varTwo =" +varTwo);

output will be :
---------------
Before Call by Value Method
varOne =10 varTwo =20
Inside Call by Value Method
varOne =100 varTwo =200
After Call by Value Method
varOne =10 varTwo =20

Tuy nhiên, khi một biến đề cập đến một đối tượng bao gồm mảng, giá trị là tham chiếu đến đối tượng.

Vượt qua tham chiếu:

Trong tham chiếu vượt qua, hàm được gọi bằng cách truyền trực tiếp tham chiếu/địa chỉ của biến làm đối số. Thay đổi đối số bên trong hàm ảnh hưởng đến biến được truyền từ bên ngoài hàm. Trong các đối tượng và mảng JavaScript theo sau vượt qua tham chiếu.

function callByReference(varObj) { 
console.log("Inside Call by Reference Method");
varObj.a = 100;
console.log(varObj);
}
let varObj = {a:1};
console.log("Before Call by Reference Method");
console.log(varObj);
callByReference(varObj) console.log("After Call by Reference Method");
console.log(varObj);
output will be :
---------------
Before Call by Reference Method
{a: 1}
Inside Call by Reference Method
{a: 100}
After Call by Reference Method
{a: 100}

Vì vậy, nếu chúng ta chuyển đối tượng hoặc mảng làm đối số cho phương thức, thì có khả năng giá trị của đối tượng có thể thay đổi.

Nếu bạn muốn tạo trang web hoặc cổng thông tin - liên hệ với chúng tôi @ https://www.bondesk.in

Các tài liệu tham khảo chuỗi có trong JavaScript không?

Chuỗi là một loại tham chiếu đặc biệt hoạt động giống như một loại giá trị trong toán tử bình đẳng. that acts like a value type in equality operator.

Chuỗi có thể được thông qua bằng cách tham khảo?

Không có gì trong Java được truyền qua tham chiếu và vì một chuỗi là bất biến, nên việc gán đó tạo ra một đối tượng chuỗi mới mà bản sao của tham chiếu hiện chỉ ra.Tham chiếu ban đầu vẫn chỉ vào chuỗi trống.Điều này sẽ giống nhau cho bất kỳ đối tượng nào, tức là, đặt nó thành một giá trị mới trong một phương thức., and since a string is immutable, that assignment creates a new string object that the copy of the reference now points to. The original reference still points to the empty string. This would be the same for any object, i.e., setting it to a new value in a method.

JavaScript có vượt qua chức năng bằng cách tham khảo không?

Giá trị nguyên thủy: Trong khi tất cả các đối tượng (bao gồm các hàm) được truyền bằng tham chiếu trong JavaScript.all objects (including functions) are passed by reference in javascript.

JavaScript là tham chiếu hay theo giá trị?

Trong JavaScript, bạn có thể chuyển qua giá trị và bằng cách tham khảo.Sự khác biệt chính giữa hai là chuyển qua giá trị xảy ra khi gán nguyên thủy trong khi truyền bằng cách tham chiếu khi gán các đối tượng.