相关疑难解决方法(0)

如何正确克隆JavaScript对象?

我有一个对象,x.我想把它复制为对象y,这样改变y就不要修改了x.我意识到复制从内置JavaScript对象派生的对象将导致额外的,不需要的属性.这不是问题,因为我正在复制我自己的一个文字构造的对象.

如何正确克隆JavaScript对象?

javascript clone javascript-objects

2922
推荐指数
42
解决办法
176万
查看次数

JavaScript是一种传递引用还是按值传递的语言?

原始类型(Number,String等)按值传递,但是对象是未知的,因为它们可以是值传递(如果我们认为持有对象的变量实际上是对象的引用)并且通过引用传递(当我们认为对象的变量保存对象本身时).

虽然最后并不重要,但我想知道提交传递约定的参数的正确方法是什么.是否有JavaScript规范的摘录,它定义了与此相关的语义?

javascript pass-by-reference pass-by-value

1311
推荐指数
19
解决办法
34万
查看次数

你如何在Javascript中克隆一个对象数组?

...每个对象还引用同一数组中的其他对象?

当我第一次想出这个问题时,我就是这样的

var clonedNodesArray = nodesArray.clone()
Run Code Online (Sandbox Code Playgroud)

将存在并搜索有关如何在javascript中克隆对象的信息.我确实在StackOverflow上找到了一个问题(由同样的@JohnResig回答)他指出用jQuery你可以做的

var clonedNodesArray = jQuery.extend({}, nodesArray);
Run Code Online (Sandbox Code Playgroud)

克隆一个对象.我试过这个,但这只复制了数组中对象的引用.所以,如果我

nodesArray[0].value = "red"
clonedNodesArray[0].value = "green"
Run Code Online (Sandbox Code Playgroud)

nodesArray [0]和clonedNodesArray [0]的值都将变为"绿色".然后我试了一下

var clonedNodesArray = jQuery.extend(true, {}, nodesArray);
Run Code Online (Sandbox Code Playgroud)

哪个深层复制了一个Object,但我分别从Firebug和Opera Dragonfly 那里得到了" 过多的递归 "和" 控制堆栈溢出 "的消息.

你会怎么做?这是不应该做的事吗?在Javascript中是否有可重用的方法?

javascript

392
推荐指数
16
解决办法
32万
查看次数

Javascript引用与价值

我正在寻找一些很好的综合阅读材料,当Javascript按值传递某些内容时,以及何时通过引用和修改传递的项目时会影响函数外部的值,何时不会.我还对通过引用与值分配另一个变量以及是否遵循任何不同的规则而不是作为函数参数传递感兴趣.

我已经做了很多搜索并找到了很多具体的例子(其中很多都是在SO上),我可以从中开始拼凑出真正的规则,但我还没有找到一个单一的,写得很好的文档,描述了这一切.

此外,语言中是否有方法可以控制是通过引用还是通过值传递某些内容?

以下是我想要了解的一些问题类型.这些只是示例 - 我实际上是在了解语言所遵循的规则,而不仅仅是具体示例的答案.但是,这里有一些例子:

function f(a,b,c) {
   a = 3;
   b.push("foo");
   c.first = false;
}

var x = 4;
var y = ["eeny", "miny", "mo"];
var z = {first: true};
f(x,y,z);
Run Code Online (Sandbox Code Playgroud)

对于所有不同类型,x,y和z的内容何时在f的范围之外变化?

function f() {
    var a = ["1", "2", "3"];
    var b = a[1];
    a[1] = "4";
    // what is the value of b now for all possible data types that the array in "a" might hold?
}

function f() {
    var a = [{yellow: "blue"}, {red: …
Run Code Online (Sandbox Code Playgroud)

javascript reference pass-by-reference pass-by-value

367
推荐指数
4
解决办法
28万
查看次数

如何深度合并而不是浅合并?

无论Object.assign对象传播只能做一浅合并.

问题的一个例子:

// No object nesting
const x = { a: 1 }
const y = { b: 1 }
const z = { ...x, ...y } // { a: 1, b: 1 }
Run Code Online (Sandbox Code Playgroud)

输出是你所期望的.但是如果我试试这个:

// Object nesting
const x = { a: { a: 1 } }
const y = { a: { b: 1 } }
const z = { ...x, ...y } // { a: { b: 1 } }
Run Code Online (Sandbox Code Playgroud)

代替

{ a: …
Run Code Online (Sandbox Code Playgroud)

javascript spread-syntax

289
推荐指数
22
解决办法
14万
查看次数

如何更新React中的嵌套状态属性

我试图通过使用这样的嵌套属性来组织我的状态:

this.state = {
   someProperty: {
      flag:true
   }
}
Run Code Online (Sandbox Code Playgroud)

但是像这样更新状态,

this.setState({ someProperty.flag: false });
Run Code Online (Sandbox Code Playgroud)

不起作用.怎么能正确完成?

javascript setstate ecmascript-6 reactjs

288
推荐指数
13
解决办法
18万
查看次数

克隆除一个键之外的js对象

我有一个扁平的JS对象:

{a: 1, b: 2, c: 3, ..., z:26}
Run Code Online (Sandbox Code Playgroud)

我想克隆除一个元素之外的对象:

{a: 1, c: 3, ..., z:26}
Run Code Online (Sandbox Code Playgroud)

最简单的方法是什么(如果可能,最好使用es6/7)?

javascript ecmascript-harmony ecmascript-6 ecmascript-7

237
推荐指数
16
解决办法
13万
查看次数

(深)使用jQuery复制数组

可能重复:
克隆JavaScript对象的最有效方法是什么?

我需要复制一个(有序的,非关联的)对象数组.我正在使用jQuery.我最初尝试过

jquery.extend({}, myArray)
Run Code Online (Sandbox Code Playgroud)

但是,当然,这给了我一个对象,我需要一个数组(顺便说一句,真的很喜欢jquery.extend).

那么,复制数组的最佳方法是什么?

javascript jquery

210
推荐指数
5
解决办法
12万
查看次数

克隆Node.js中的对象

在node.js中克隆对象的最佳方法是什么

例如,我想避免以下情况:

var obj1 = {x: 5, y:5};
var obj2 = obj1;
obj2.x = 6;
console.log(obj1.x); // logs 6
Run Code Online (Sandbox Code Playgroud)

该对象可能包含复杂类型作为属性,因此简单的(obj1中的var x)无法解决.我是否需要自己编写一个递归克隆,或者是否有内置的东西我没有看到?

javascript node.js

187
推荐指数
12
解决办法
15万
查看次数

如何通过引用将JavaScript对象复制到新变量?

在这里编写了一个快速的jsfiddle ,我将一个小的json对象传递给一个新的变量并修改原始变量(而不是新变量)的数据,但新变量的数据也会更新.这必须意味着json对象是通过引用传递的,对吧?

这是我的快速代码:

var json_original = {one:'one', two:'two'}

var json_new = json_original;

console.log(json_original); //one, two
console.log(json_new); //one, two

json_original.one = 'two';
json_original.two = 'one';

console.log(json_original); //two, one
console.log(json_new); //two, one
Run Code Online (Sandbox Code Playgroud)

有没有办法制作json对象的深层副本,以便修改原始变量不会修改新变量?

javascript object javascript-objects

167
推荐指数
2
解决办法
18万
查看次数