有没有一种方法可以知道两个 JavaScript 变量指向相同的内存地址?
var my_var = {
id: 1,
attribute: "myAttribute"
}
var copy = my_var;
//someting like
if(copy === my_var) return true;
有没有一种方法可以知道两个 JavaScript 变量指向相同的内存地址?
var my_var = {
id: 1,
attribute: "myAttribute"
}
var copy = my_var;
//someting like
if(copy === my_var) return true;
在JavaScript中,您不能像在C语言中那样使用别名变量。
var x = 1;
var y = x
y = 4;
// x is still 1
这将始终如此。
然而,对象始终按引用传递。
var x = { one: 1, two: 2 };
var y = x;
y.one = 100;
// x.one is now 100
有没有办法知道2个 JavaScript 变量指向同一个内存地址?
一般来说,答案是不行的。原始类型(如数字)通过值传递。所以我们有:
> var x = 1;
> var y = 1;
> x === y;
true
即使它们不引用同一内存位置(这是一个实现细节,但至少在V8中它们不指向相同的内存地址)。
但是当两边都是对象时,是的:使用==
或===
。如果两边都是对象,则每个运算符检查它们是否指向相同的内存地址。
> var x = {test: 1};
> var y = {test: 1};
> x === y;
false
var a = 1; var b = a; a = 2; console.log(b);
它会输出 1
。 - freakishid(variableName)
来获取内存地址:>>> x = "hello world"
>>> id(x)
4347327152
>>> x = 2
>>> id(x)
4305328544
id
内置函数。 - temporary_user_namex = 1
然后x = y
时,x
和y
共享相同的内存地址引用。我仍然不明白JavaScript是否也会发生这种情况。 - viery365
Object
,这将为true
。这不会检查相同的内存分配。 - antyrat===
检查类型和值。如果两边都是对象,则检查它们是否指向相同的地址。就是这样。 - freakish