相关疑难解决方法(0)

在JavaScript中深度克隆对象的最有效方法是什么?

克隆JavaScript对象的最有效方法是什么?我已经看到obj = eval(uneval(o));被使用,但这是非标准的,只有Firefox支持.

我做过类似的事情,obj = JSON.parse(JSON.stringify(o));但质疑效率.

我也看到了具有各种缺陷的递归复制功能.
我很惊讶没有规范的解决方案.

javascript clone object

5181
推荐指数
48
解决办法
189万
查看次数

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

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

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

javascript pass-by-reference pass-by-value

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

安全地将JSON字符串转换为对象

给定一串JSON数据,您如何安全地将该字符串转换为JavaScript对象?

很显然,你可以通过像......这样的东西不安全地做到这一点.

var obj = eval("(" + json + ')');
Run Code Online (Sandbox Code Playgroud)

...但是这使得我们容易受到包含其他代码的json字符串的影响,这对于简单的eval来说似乎非常危险.

javascript json

1298
推荐指数
15
解决办法
123万
查看次数

将对象转换为字符串

如何将JavaScript对象转换为字符串?

例:

var o = {a:1, b:2}
console.log(o)
console.log('Item: ' + o)
Run Code Online (Sandbox Code Playgroud)

输出:

对象{a = 1,b = 2} //非常好的可读输出:)
项目:[object Object] //不知道里面是什么:(

javascript string object tostring

926
推荐指数
21
解决办法
150万
查看次数

754
推荐指数
22
解决办法
55万
查看次数

在JavaScript中复制数组的最快方法 - 切片与'for'循环

为了在JavaScript中复制数组:以下哪个更快使用?

切片方法

var dup_array = original_array.slice();
Run Code Online (Sandbox Code Playgroud)

For

for(var i = 0, len = original_array.length; i < len; ++i)
   dup_array[i] = original_array[i];
Run Code Online (Sandbox Code Playgroud)

我知道两种方式只做一个浅的副本:如果original_array包含对象的引用,则不会克隆对象,但只会复制引用,因此两个数组都将引用相同的对象.但这不是这个问题的重点.

我只询问速度.

javascript arrays copy duplicates slice

594
推荐指数
17
解决办法
55万
查看次数

你如何在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中,如何有条件地将成员添加到对象?

我想创建一个有条件添加成员的对象.简单的方法是:

var a = {};
if (someCondition)
    a.b = 5;
Run Code Online (Sandbox Code Playgroud)

现在,我想写一个更惯用的代码.我在尝试:

a = {
    b: (someCondition? 5 : undefined)
};
Run Code Online (Sandbox Code Playgroud)

但现在,ba其价值的成员undefined.这不是理想的结果.

有方便的解决方案吗?

更新

我寻求一个可以处理几个成员的一般情况的解决方案.

a = {
  b: (conditionB? 5 : undefined),
  c: (conditionC? 5 : undefined),
  d: (conditionD? 5 : undefined),
  e: (conditionE? 5 : undefined),
  f: (conditionF? 5 : undefined),
  g: (conditionG? 5 : undefined),
 };
Run Code Online (Sandbox Code Playgroud)

javascript

294
推荐指数
18
解决办法
12万
查看次数

如何从数组中获取子数组?

我有var ar = [1, 2, 3, 4, 5]并且想要一些函数getSubarray(array, fromIndex, toIndex),调用的结果getSubarray(ar, 1, 3)是新数组[2, 3, 4].

javascript arrays

238
推荐指数
4
解决办法
26万
查看次数

克隆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万
查看次数