相关疑难解决方法(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万
查看次数

Javascript代码技巧:foo.x的价值是什么

我在Github前端访谈问题集中遇到了这个问题:

var foo = {n: 1};
var bar = foo;
foo.x = foo = {n: 2};
Run Code Online (Sandbox Code Playgroud)

问题:foo.x的价值是多少?

答案是undefined.

我做了一些研究,我明白这个问题是(如果我错了,请纠正我):

  • var foo = {n: 1};声明一个foo属性n等于1 的对象.
  • var bar = foo;声明了一个bar引用相同对象的对象foo.
  • foo.x = foo = {n: 2}; 我认为这等于 foo.x = (foo = {n: 2});
  • 然后我得到了foo.x平等undefined.但是,值bar.x是对象{n:2}.

如果barfoo是指同一个对象,为什么bar.x得到的价值,同时foo.xundefined?真正发生了foo.x = foo = {n: 2}; …

javascript object variable-assignment

53
推荐指数
3
解决办法
7081
查看次数

原始值与参考值

我读了一本名为"面向Web开发人员的专业Javascript"的书,它说:"变量由参考值或原始值指定.参考值是存储在内存中的对象".然后它没有说明如何存储原始值.所以我猜它没有存储在内存中.基于此,当我有这样的脚本:

var foo = 123;
Run Code Online (Sandbox Code Playgroud)

Javascript如何记住foo变量供以后使用?

javascript

34
推荐指数
2
解决办法
3万
查看次数

对象引用会占用额外的内存吗?

假设您有以下复杂对象:

var object1 = .... // (something complexed)
Run Code Online (Sandbox Code Playgroud)

这会占用xJS应用程序中的内存量.现在假设您有一些其他参考对象object1:

var otherObject = { something: true, value: 'yes', object: object1 };

var anotherObject = { color: '#FFF', object: object1 };
Run Code Online (Sandbox Code Playgroud)

object1最初占用的内存量是否增加了两倍?或者引用object1不添加内存开销?

我不确定如何自己测试以确定答案.(如果你可以告诉我如何指向一个有助于对此进行基准测试的工具,那么可以获得奖励积分).

javascript memory memory-management object

21
推荐指数
2
解决办法
2329
查看次数

JavaScript空对象大小

JavaScript中空对象的内存占用量是多少?如果使用对象文字语法创建对象:

let emptyObj = {};
Run Code Online (Sandbox Code Playgroud)

在谷歌C​​hrome开发者工具(配置文件选项卡)中,拍摄快照后,它显示浅尺寸保留尺寸等于56字节.此外,如果通过以下方式创建对象,则会出现相同的大小:

let emptyObj = Object.create(null);
Run Code Online (Sandbox Code Playgroud)

对我来说,这太过分了,因为我在代码执行期间创建了很多对象(不一定是空的,但主要是只有很少的属性),我必须将它们存储在内存中.我假设如果可以减少空对象大小,也可以通过相同数量的字节减少具有属性的对象的大小.

例如,如果object看起来像这样:

let foo = {bar: 4};
Run Code Online (Sandbox Code Playgroud)

它的大小,比方说,56(空对象开销)+ 6(密钥)+ 8(值)= 70字节,然后将空对象的大小减少40个字节将导致foo的大小为30字节(16 + 6 + 8).

这是对Chrome空对象大小的正确解释吗?是否可以减少它?它会导致非空对象的大小减小吗?

javascript memory object

10
推荐指数
1
解决办法
570
查看次数

更新数组中的项目会更新所有项目

我正在使用带有vuex的vuejs使用项目的应用程序,每个项目都有一个或多个作业.

我可以添加,删除和更新作业.添加和删​​除工作正常,但更新不是.

vuex开发工具中的状态:

项目

我的HTML:

<div class="job-compact row" v-for="(job, index) in project.jobs">
        <div class="col-md-6">
            <div class="form-group" :class="{'has-error' : errors.has('jobs.' + index + '.function')}">
                <input type="text" name="jobs[function][]" class="form-control" v-model="job.function" @change="updateJobValue(index, 'function', $event.target.value)"/>
            </div>
        </div>
        <div class="col-md-4">
            <div class="form-group" :class="{'has-error' : errors.has('jobs.' + index + '.profiles')}">
                <input type="number" name="jobs[profiles][]" class="form-control" v-model="job.profiles" @change="updateJobValue(index, 'profiles', $event.target.value)"/>
            </div>
        </div>
        <div class="col-md-2">
            <button v-if="index == 0" class="btn btn-success btn-sm" @click="addJob"><i class="fa fa-plus"></i></button>
            <button v-if="index > 0" class="btn btn-danger btn-sm" @click="deleteJob(index);"><i class="fa fa-minus"></i></button>
        </div>
    </div>
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我有一个v-for显示我所有工作的东西.在我的作业中编辑值时,我使用该 …

javascript vue.js vuex vuejs2

7
推荐指数
1
解决办法
2837
查看次数

.bind(this)是通过引用还是通过值传递的?

我在某处创建了一个函数并将其绑定到this我可以使用父块的含义this作为this函数内的值.例如:

var foo = function() {
    // some stuff involving other stuff
}.bind(this);
Run Code Online (Sandbox Code Playgroud)

this我作为参数传递给bind按引用传递,或价值?因此,如果我this稍后在外部代码块中更改对象的参数,然后调用foo,将foo使用this我调用时的值bind,还是在我调用的时候foo

javascript binding this pass-by-reference pass-by-value

6
推荐指数
1
解决办法
231
查看次数

JavaScript是按引用传递还是按值传递?

JavaScript语言是通过引用传递还是按值传递语言?

对于对象的原始类型Vs也是不同的吗?

html javascript oop

5
推荐指数
2
解决办法
765
查看次数

使用对象作为有效负载更新切片中的状态

我有这个切片:

import { createSlice, PayloadAction } from '@reduxjs/toolkit';
import { IAuthState } from '../../types';

const initialState: IAuthState = {
  isAuthenticated: false,
  profile: null,
};

export const authSlice = createSlice({
  name: 'auth',
  initialState,
  reducers: {
    setAuthState(state, { payload }: PayloadAction<IAuthState>) {
      console.log({ payload });
      state = payload;
    },
  },
});

export const { setAuthState } = authSlice.actions;
export const authReducer = authSlice.reducer;
Run Code Online (Sandbox Code Playgroud)

这是标准的样板切片。

问题是,如果我这样做,我的状态不会更新。Redux devtools 说没有变化。我的有效负载是这样的:

{
    isAuthenticated: true,
    profile: {...} // big object
}
Run Code Online (Sandbox Code Playgroud)

但如果我这样分配:

 reducers: {
    setAuthState(state, { payload …
Run Code Online (Sandbox Code Playgroud)

javascript typescript reactjs redux redux-toolkit

5
推荐指数
1
解决办法
5019
查看次数