Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.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/5/url/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 正在设置对象属性:!object.property易失性?_Javascript_Javascript Objects - Fatal编程技术网

Javascript 正在设置对象属性:!object.property易失性?

Javascript 正在设置对象属性:!object.property易失性?,javascript,javascript-objects,Javascript,Javascript Objects,该代码是否会使对象发生变异,或者以任何其他方式不稳定? 如果是这样,我怎么能避免呢 const object = {property: false}; const test = {property: !object.property}; 你的代码不会改变任何东西。当您创建测试时,原始对象不会受到影响,因为。属性是布尔值(因此是值类型),因此新的赋值仅按值进行 const test = {property: !object.property}; // assigns a new value to

该代码是否会使对象发生变异,或者以任何其他方式不稳定? 如果是这样,我怎么能避免呢

const object = {property: false};
const test = {property: !object.property};

你的代码不会改变任何东西。当您创建
测试
时,原始
对象
不会受到影响,因为
。属性
是布尔值(因此是值类型),因此新的赋值仅按值进行

const test = {property: !object.property}; // assigns a new value to a new reference
另一方面,这有:

const object = {property: false};
object.property = !object.property; // mutating the object
const test = object; // copying the reference
不过,您可以这样做:

const object = {property: false};
const test = {...object, property: !object.property}; // creates a copy of object and over-writes the value of the new property

不,您的代码不会改变任何对象。请在控制台中尝试,您将看到哪些更改,哪些没有更改。尝试使用不同的值和运算符,您将很快了解其工作原理。如果仍然不清楚,您可以查看一些基本的JavaScript教程或阅读ECMAScript规范。JavaScript是单线程的,因此波动性不是真正的问题,除非您在异步操作后引用自由变量<代码>变量x={foo:'bar'};异步函数main(){console.log(x);等待新承诺(resolve=>setTimeout(resolve,100));console.log(x);}main();setTimeout(=>x.foo='test',0)是您唯一需要担心的情况。