Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/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,我有一个对象“a”,我把它分配给另一个名为“b”的变量。 现在我使用delete关键字从“b”中删除一些属性值。它从对象“a”和“b”中删除该属性。为什么呢 我是javascript的初学者。对我宽容点 代码:- a={ 答:1,, b:2, c:3 } 设b=a; console.log(a);//输出{a:1,b:2,c:3} 删除b.a; console.log(a)//预期输出{a:1,b:2,c:3}——实际输出{b:2,c:3}您的问题更多地涉及到这样一个事实,即某些类型是通过值分

我有一个对象“a”,我把它分配给另一个名为“b”的变量。 现在我使用delete关键字从“b”中删除一些属性值。它从对象“a”和“b”中删除该属性。为什么呢

我是javascript的初学者。对我宽容点

代码:-

a={
答:1,,
b:2,
c:3
}
设b=a;
console.log(a);//输出{a:1,b:2,c:3}
删除b.a;

console.log(a)//预期输出{a:1,b:2,c:3}——实际输出{b:2,c:3}
您的问题更多地涉及到这样一个事实,即某些类型是通过值分配的,而其他类型是通过引用分配的

简而言之

原语类型由值(布尔值、空值、未定义值、数字、字符串、符号)指定(ES 6中新增)

非基本类型通过引用(对象、数组、函数)分配


示例:基本类型 正如您所见,更改
b
不会影响
a
,因为数字是按值分配的


示例:非基本类型 正如您所见,更改
b
会影响
a
的值,因为它是通过引用分配的,这与您的示例类似,该问题与
delete
无关,但它与对象是通过引用分配的事实有关,因此从
b
中删除键将影响
a


克隆: 在某些情况下,您需要克隆非基元类型的对象,并且不改变当前对象,您可以使用以下方法:

  • ES5
    var clone=Object.assign({},obj)
    var clone=JSON.parse(JSON.stringify(obj))

  • ES6
    var clone={…obj}

  • 现在更新
    clone
    不会影响
    obj


    最后,您可以在本教程中阅读更多有关此主题的内容,这可以让您更好地了解如何使用内存分配插图进行此操作:

    let b = a;
    
    只需将对象a的引用传递给b。所以a和b指向同一个参考。因此,其中任何一项的变化都将反映在其他方面

    基本上,你的记忆中有这样的东西:

    a:ref12345−−−+
                 |
                 |
                 |    +−−−−−−−−−−−−−+                 
                 +−−−>|  (object)   |                 
                 |    +−−−−−−−−−−−−−+                 
                 |    | prop1: "a"  |                 
                 |    | prop2: "b"  |
    b :ref12345−−+    | prop3: "c"  |
                      |             |
                      +−−−−−−−−−−−−−+                
    

    Java脚本数组是通过引用复制来复制的。因此,如果编辑复制的数组,则会更改原始数组。 你可以用

    设b=a。切片()

    ES6中的扩展运算符。
    设b=[…a]

    这是通过引用传递的,这里
    a
    b
    都将具有相同的值,因此它从相同的值中删除“b”和“a”都是指向同一对象的变量。可能的重复是指a到b。不将a的值复制到b数组中。可以是b={…a}非常感谢。我明白了。我可以按值分配非基本类型吗?欢迎您。。。可能您正在询问如何克隆您的对象。。。我也编辑了答案来解释这一点:)
    let b = a;
    
    a:ref12345−−−+
                 |
                 |
                 |    +−−−−−−−−−−−−−+                 
                 +−−−>|  (object)   |                 
                 |    +−−−−−−−−−−−−−+                 
                 |    | prop1: "a"  |                 
                 |    | prop2: "b"  |
    b :ref12345−−+    | prop3: "c"  |
                      |             |
                      +−−−−−−−−−−−−−+